洛谷 1003 鋪地毯

傳送門

題目描述

爲了準備一個獨特的頒獎典禮,組織者在會場的一片矩形區域(可看做是平面直角座標系的第一象限)鋪上一些矩形地毯。一共有 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
*/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章