信息学奥赛一本通 1118:铺地毯 | 1863:【11NOIP提高组】铺地毯 | OpenJudge NOI 1.9 14 | 洛谷 P1003 [NOIP2011 提高组] 铺地毯
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1118:铺地毯 | 1863:【11NOIP提高组】铺地毯 | OpenJudge NOI 1.9 14 | 洛谷 P1003 [NOIP2011 提高组] 铺地毯
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1118:鋪地毯
ybt 1863:【11NOIP提高組】鋪地毯
OpenJudge NOI 1.9 14:鋪地毯
洛谷 P1003 [NOIP2011 提高組] 鋪地毯
【題目考點】
1. 結(jié)構(gòu)體
2. 數(shù)組
【解題思路】
- 設(shè)結(jié)構(gòu)體Carpet表示地毯,其中4個成員變量,(xmin, ymin)表示地毯左下點的坐標(biāo),(xmax, ymax)表示地毯右上點的坐標(biāo)。設(shè)構(gòu)造函數(shù),用輸入的a,b(左下角點的坐標(biāo)),g,k(地毯橫縱向長度)來計算出4個成員變量。設(shè)成員函數(shù)contains判斷某一點是否被該地毯蓋住。
- 主函數(shù)中,設(shè)Carpet類型數(shù)組,表示多個地毯。
- 輸入數(shù)據(jù),初始化前n個地毯。輸入要蓋住的點x,y
- 從后向前遍歷地毯數(shù)組,只要找到一個能蓋住x,y點的地毯,就輸出該地毯的編號,并結(jié)束程序。因為后輸入的地毯,一定是蓋在更上面的地毯。
- 如果遍歷沒能找到蓋住x,y點的地毯,那么該點沒被蓋住,輸出-1。
- 注: 有些同學(xué)在解題時抗拒使用結(jié)構(gòu)體。這一問題不用結(jié)構(gòu)體確實可以寫。理論上實現(xiàn)任何程序都可以不用結(jié)構(gòu)體。但結(jié)構(gòu)體,或者說類,可以讓人們能夠更簡單地將人的思維翻譯成程序語言。寫代碼時使用結(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個成員變量 {xmin = a;ymin = b;xmax = a + g;ymax = b + k;}bool contains(int x, int y)//地毯是否蓋住(x,y)點{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)//從后向前遍歷,找到的第一個包含x,y點的地毯就是這一點最上面的地毯 {if(carp[i].contains(x, y))//若地毯i覆蓋了點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
- 下一篇: 素数判定模板