題目來源:https://www.luogu.org/problem/P1003 題目描述 為了準備一個獨特的頒獎典禮,組織者在會場的一片矩形區域(可看做是平面直角坐標系的第一象限)鋪上一些矩形地毯。一共有 nn 張地毯,編號從 11 到nn。現在將這些地毯按照編號從小到大的順序平行於坐標軸先後鋪設 ...
題目來源:https://www.luogu.org/problem/P1003
題目描述
為了準備一個獨特的頒獎典禮,組織者在會場的一片矩形區域(可看做是平面直角坐標系的第一象限)鋪上一些矩形地毯。一共有 nn 張地毯,編號從 11 到nn。現在將這些地毯按照編號從小到大的順序平行於坐標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。
地毯鋪設完成後,組織者想知道覆蓋地面某個點的最上面的那張地毯的編號。註意:在矩形地毯邊界和四個頂點上的點也算被地毯覆蓋。
輸入格式
輸入共n+2n+2行
第一行,一個整數nn,表示總共有nn張地毯
接下來的nn行中,第 i+1i+1行表示編號ii的地毯的信息,包含四個正整數a ,b ,g ,ka,b,g,k ,每兩個整數之間用一個空格隔開,分別表示鋪設地毯的左下角的坐標(a,b)(a,b)以及地毯在xx軸和yy軸方向的長度
第n+2n+2行包含兩個正整數xx和yy,表示所求的地面的點的坐標(x,y)(x,y)
輸出格式
輸出共11行,一個整數,表示所求的地毯的編號;若此處沒有被地毯覆蓋則輸出-1−1
輸入輸出樣例
輸入 #13 1 0 2 3 0 2 3 3 2 1 3 3 2 2輸出 #1
3輸入 #2
3 1 0 2 3 0 2 3 3 2 1 3 3 4 5輸出 #2
-1
說明/提示
【樣例解釋1】
如下圖,11 號地毯用實線表示,22 號地毯用虛線表示,33 號用雙實線表示,覆蓋點(2,2)(2,2)的最上面一張地毯是 33 號地毯。
【數據範圍】
對於30% 的數據,有 n ≤2n≤2 ;
對於50% 的數據,0 ≤a, b, g, k≤1000≤a,b,g,k≤100;
對於100%的數據,有 0 ≤n ≤10,0000≤n≤10,000 ,0≤a, b, g, k ≤100,0000≤a,b,g,k≤100,000。
noip2011提高組day1第1題
#include<iostream> #include<cstdio> using namespace std; int book[10001][5]; int main() { int n,x,y; cin >> n; for(int i = 1;i <= n;i++) for(int j = 1;j <= 4;j++)//第一二列記錄坐標,第三四列記錄x,y的長度 cin >> book[i][j];//book數組作用為:book[i][1]:第i張地毯起始點的x軸,a[i][2]:第i張地毯起始點的y軸,a[i][3]:第i張地毯終點的x軸的終點,a[i][4]:第i張地毯終點的y軸 // cout << book[1][4] << "p" << endl; cin >> x >> y; for(int i = n;i >= 1;i--)//在直角坐標系中,從下往上掃 { if((book[i][1] <= x) && (book[i][3] + book[i][1] >= x) &&//判斷x,y是否在第i張地毯的範圍內 (book[i][2] <= y) && (book[i][2] + book[i][4] >= y))//判斷第i張地毯是否覆蓋(x,y)。若覆蓋,輸出並結束。 { cout << i; return 0; } if(i == 1) cout << -1; } return 0; } /* 3 1 0 2 3 0 2 3 3 2 1 3 3 2 2 */
下麵附上RE代碼,以為暴力可以出來的當時,但是我錯了,三層迴圈hh
#include<iostream> #include<cstring> #define N 100 using namespace std; int main() { // int c[N][N]; int book[N][N]; memset(book,0,sizeof(book)); int n; int a,b,g,k,x,y; cin >> n; for(int i = 0;i < n;i++) { cin >> a >> b >> g >> k; for(int j = a;j <= g + a;j++) { for(int l = b;l <= k + b;l++) { book[j][l]++; } } } cin >> x >> y; if(book[x][y] == 0) cout << "-1" << endl; else cout << book[x][y] << endl; return 0; }
題解理解了好一會才明白,從最後一張地毯開始往前判斷,在矩形範圍內則滿足條件直接輸出,到第一張地毯都不滿足的話直接return
定義了n行4列的矩陣,前兩列表示坐標,後兩列表示矩形長寬。
理解if語句後就不難了。