信息学奥赛一本通 1118:铺地毯 | 1863:【11NOIP提高组】铺地毯 | OpenJudge NOI 1.9 14 | 洛谷 P1003 [NOIP2011 提高组] 铺地毯
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1118:铺地毯 | 1863:【11NOIP提高组】铺地毯 | OpenJudge NOI 1.9 14 | 洛谷 P1003 [NOIP2011 提高组] 铺地毯
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目鏈接】
ybt 1118:鋪地毯
ybt 1863:【11NOIP提高組】鋪地毯
OpenJudge NOI 1.9 14:鋪地毯
洛谷 P1003 [NOIP2011 提高組] 鋪地毯
【題目考點(diǎn)】
1. 結(jié)構(gòu)體
2. 數(shù)組
【解題思路】
- 設(shè)結(jié)構(gòu)體Carpet表示地毯,其中4個(gè)成員變量,(xmin, ymin)表示地毯左下點(diǎn)的坐標(biāo),(xmax, ymax)表示地毯右上點(diǎn)的坐標(biāo)。設(shè)構(gòu)造函數(shù),用輸入的a,b(左下角點(diǎn)的坐標(biāo)),g,k(地毯橫縱向長度)來計(jì)算出4個(gè)成員變量。設(shè)成員函數(shù)contains判斷某一點(diǎn)是否被該地毯蓋住。
- 主函數(shù)中,設(shè)Carpet類型數(shù)組,表示多個(gè)地毯。
- 輸入數(shù)據(jù),初始化前n個(gè)地毯。輸入要蓋住的點(diǎn)x,y
- 從后向前遍歷地毯數(shù)組,只要找到一個(gè)能蓋住x,y點(diǎn)的地毯,就輸出該地毯的編號,并結(jié)束程序。因?yàn)楹筝斎氲牡靥?#xff0c;一定是蓋在更上面的地毯。
- 如果遍歷沒能找到蓋住x,y點(diǎn)的地毯,那么該點(diǎn)沒被蓋住,輸出-1。
- 注: 有些同學(xué)在解題時(shí)抗拒使用結(jié)構(gòu)體。這一問題不用結(jié)構(gòu)體確實(shí)可以寫。理論上實(shí)現(xiàn)任何程序都可以不用結(jié)構(gòu)體。但結(jié)構(gòu)體,或者說類,可以讓人們能夠更簡單地將人的思維翻譯成程序語言。寫代碼時(shí)使用結(jié)構(gòu)體更符合人的思維習(xí)慣,寫出的代碼更加直觀易懂。建議同學(xué)們要學(xué)會使用結(jié)構(gòu)體。
【題解代碼】
解法1:
#include <bits/stdc++.h> using namespace std; typedef struct Carpet {int xmin, xmax, ymin, ymax;Carpet(){}Carpet(int a, int b, int g, int k)//用左下角坐標(biāo)及橫縱方向長度來初始化4個(gè)成員變量 {xmin = a;ymin = b;xmax = a + g;ymax = b + k;}bool contains(int x, int y)//地毯是否蓋住(x,y)點(diǎn){return x >= xmin && x <= xmax && y >= ymin && y <= ymax;} }Carpet;int main() {int n, a, b, g, k, x, y; Carpet carp[10005];cin>>n;for(int i = 1; i <= n; ++i){cin>>a>>b>>g>>k;carp[i] = Carpet(a, b, g, k);}cin>>x>>y;for(int i = n; i >= 1; --i)//從后向前遍歷,找到的第一個(gè)包含x,y點(diǎn)的地毯就是這一點(diǎn)最上面的地毯 {if(carp[i].contains(x, y))//若地毯i覆蓋了點(diǎn)x,y {cout<<i;return 0;}}cout<<-1;//若沒有被地毯覆蓋 return 0; }總結(jié)
以上是生活随笔為你收集整理的信息学奥赛一本通 1118:铺地毯 | 1863:【11NOIP提高组】铺地毯 | OpenJudge NOI 1.9 14 | 洛谷 P1003 [NOIP2011 提高组] 铺地毯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(2029:【例4.15
- 下一篇: 素数判定模板