題目描述
爲了準備一個獨特的頒獎典禮,組織者在會場的一片矩形區域(可看做是平面直角座標系的第一象限)鋪上一些矩形地毯。一共有 nnn 張地毯,編號從 111 到nnn。現在將這些地毯按照編號從小到大的順序平行於座標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。
地毯鋪設完成後,組織者想知道覆蓋地面某個點的最上面的那張地毯的編號。注意:在矩形地毯邊界和四個頂點上的點也算被地毯覆蓋。
輸入輸出格式
輸入格式:
輸入共n+2n+2n+2行
第一行,一個整數nnn,表示總共有nnn張地毯
接下來的nnn行中,第 i+1i+1i+1行表示編號iii的地毯的信息,包含四個正整數a,b,g,ka ,b ,g ,ka,b,g,k ,每兩個整數之間用一個空格隔開,分別表示鋪設地毯的左下角的座標(a,b)(a,b)(a,b)以及地毯在xxx軸和yyy軸方向的長度
第n+2n+2n+2行包含兩個正整數xxx和yyy,表示所求的地面的點的座標(x,y)(x,y)(x,y)
輸出格式:
輸出共111行,一個整數,表示所求的地毯的編號;若此處沒有被地毯覆蓋則輸出−1-1−1
輸入輸出樣例
輸入樣例#1:
3 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】
如下圖,111 號地毯用實線表示,222 號地毯用虛線表示,333 號用雙實線表示,覆蓋點(2,2)(2,2)(2,2)的最上面一張地毯是 333 號地毯。
【數據範圍】
對於30% 的數據,有 n≤2n ≤2n≤2 ;
對於50% 的數據,0≤a,b,g,k≤1000 ≤a, b, g, k≤1000≤a,b,g,k≤100;
對於100%的數據,有 0≤n≤10,0000 ≤n ≤10,0000≤n≤10,000 ,0≤a,b,g,k≤100,0000≤a, b, g, k ≤100,0000≤a,b,g,k≤100,000。
noip2011提高組day1第1題
不用解釋題意了,都能看懂,代碼比較簡單,能直接看懂,但是有一個坑點,在代碼下方標註出來了,就是如果正常判斷的話他的第一個y1 比 第二個y2 要大,這種情況的判斷,我們讓他的x,和y小於那兩個相加就🆗。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std;
int s[10005][5];
int main(){
int n, a , b , flag;
while(~scanf("%d", &n)){
flag = 0 ;
for(int i = 1 ; i <= n ; i ++){
cin >> s[i][1] >> s[i][2] >> s[i][3] >> s[i][4];
}
cin >> a >> b;
for(int i = n ; i > 0 ; i -- ){
//cout<<s[i][1]<<"****"<<s[i][3]<<"----"<<s[i][2] << "+++++"<<s[i][4]<<endl;
if(a >= s[i][1] && a <= (s[i][3] + s[i][1] ) && b >= s[i][2] && b <= (s[i][4] + s[i][2]))
{
cout<<i<<endl;
flag = 1;
}
if(flag == 1){
break;
}
}
if(flag == 0){
cout<<-1<<endl;
break;
}
}
return 0;
}
/*10
0 95 65 95
53 70 53 31
1 94 27 92
77 31 60 77
2 99 5 96
72 91 21 9
0 97 22 89
2 183 100 100
90 68 59 14
32 62 17 1
2 183
8
*/