第五章 數 組-1118:鋪地毯

1118:鋪地毯

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 18983 通過數: 8557
【題目描述】
爲了準備一個獨特的頒獎典禮,組織者在會場的一片矩形區域(可看做是平面直角座標系的第一象限)鋪上一些矩形地毯。一共有n張地毯,編號從1到n。現在將這些地毯按照編號從小到大的順序平行於座標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。地毯鋪設完成後,組織者想知道覆蓋地面某個點的最上面的那張地毯的編號。注意:在矩形地毯邊界和四個頂點上的點也算被地毯覆蓋。

輸入輸出樣例1說明:如下圖,1號地毯用實線表示,2號地毯用虛線表示,3號用雙實線表示,覆蓋點(2,2)的最上面一張地毯是3號地毯。

輸入輸出樣例2說明:如下圖,1號地毯用實線表示,2號地毯用虛線表示,3號用雙實線表示,覆蓋點(4,5)的最上面沒有一張地毯。

在這裏插入圖片描述

【輸入】
第一行,一個整數n,表示總共有n張地毯。

接下來的n行中,第i+1行表示編號i的地毯的信息,包含四個正整數a,b,g,k,每兩個整數之間用一個空格隔開,分別表示鋪設地毯的左下角的座標(a,b)以及地毯在x軸和y軸方向的長度。

第n+2行包含兩個正整數x和y,表示所求的地面的點的座標(x,y)。

【輸出】
輸出共1行,一個整數,表示所求的地毯的編號;若此處沒有被地毯覆蓋則輸出-1。

【輸入樣例】
3
1 0 2 3
0 2 3 3
2 1 3 3
2 2
【輸出樣例】
3
【提示】
樣例輸入#2:

3
1 0 2 3
0 2 3 3
2 1 3 3
4 5
樣例輸出#2:

-1
【數據範圍】

全部數據,1≤n≤10000。


思路:輸入地毯左下角座標(a,b),輸入地毯在x軸、y軸的長度,找覆蓋在最上的地毯,倒序輸出,判斷是否在範圍內,找到後輸出第幾塊,無覆蓋,輸出 -1。

#include<bits/stdc++.h>
using namespace std;

int main(){
   int i,n,x,y,a[10001],b[10001],g[10001],k[10001];
    cin>>n;
    for(i = 1;i <= n;i++)
    {
	 cin >> a[i] >> b[i]; //輸入地毯左下角座標(a,b)
     cin >> g[i] >> k[i];//輸入地毯在x軸、y軸的長度
    }
     cin >> x >> y;
    for(i = n;i >= 1;i--)////倒序輸出,找覆蓋在最上的地毯
    {
	  if((x >= a[i] && x <= a[i] + g[i]) && (y >= b[i] && y <= b[i] + k[i]))//判斷是否在範圍內
     {
     	cout << i << endl; //找到後輸出
     	exit(0);////結束 這裏寫 return 0; 也可以。用exit(0),記得加頭文件stdlib
	 }
	}  
	printf("-1\n");//無覆蓋,輸出 -1
  return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章