題目:
問題描述
在某圖形作業系統中,有 N 個視窗,每個視窗都是一個兩邊與坐標軸分別平行的矩形區域。視窗的邊界上的點也屬于該視窗。視窗之間有層次的區別,在多于一個視窗重疊的區域里,只會顯示位于頂層的視窗里的內容。
當你點擊螢屏上一個點的時候,你就選擇了處于被點擊位置的最頂層視窗,并且這個視窗就會被移到所有視窗的最頂層,而剩余的視窗的層次順序不變。如果你點擊的位置不屬于任何視窗,則系統會忽略你這次點擊。
現在我們希望你寫一個程式模擬點擊視窗的程序。
輸入格式
輸入的第一行有兩個正整數,即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10)
接下來 N 行按照從最下層到最頂層的順序給出 N 個視窗的位置。 每行包含四個非負整數 x1, y1, x2, y2,表示該視窗的一對頂點坐標分別為 (x1, y1) 和 (x2, y2)。保證 x1 < x2,y1 2。
接下來 M 行每行包含兩個非負整數 x, y,表示一次滑鼠點擊的坐標。
題目中涉及到的所有點和矩形的頂點的 x, y 坐標分別不超過 2559 和 1439。
輸出格式
輸出包括 M 行,每一行表示一次滑鼠點擊的結果。如果該次滑鼠點擊選擇了一個視窗,則輸出這個視窗的編號(視窗按照輸入中的順序從 1 編號到 N);如果沒有,則輸出"IGNORED"(不含雙引號)。
樣例輸入
3 4
0 0 4 4
1 1 5 5
2 2 6 6
1 1
0 0
4 4
0 5
樣例輸出
2
1
1
IGNORED
樣例說明
第一次點擊的位置同時屬于第 1 和第 2 個視窗,但是由于第 2 個視窗在上面,它被選擇并且被置于頂層。
第二次點擊的位置只屬于第 1 個視窗,因此該次點擊選擇了此視窗并將其置于頂層。現在的三個視窗的層次關系與初始狀態恰好相反了。
第三次點擊的位置同時屬于三個視窗的范圍,但是由于現在第 1 個視窗處于頂層,它被選擇。
最后點擊的 (0, 5) 不屬于任何視窗。
我的代碼:
#include<iostream>
using namespace std;
int main(){
int m,n;cin>>m>>n;
int arr[m][4];int brr[m][4];
for(int i=0;i<m;i++){
for(int j=0;j<4;j++){
cin>>arr[i][j];
brr[i][j]=arr[i][j];
}
}
for(int i=0;i<n;i++){
int a,b;int num=0;
cin>>a>>b;
for(int j=m-1;j>=0;j--){
if(a>=arr[j][0]&&a<=arr[j][2]&&b>=arr[j][1]&&b<=arr[j][3]){
for(int g=0;g<m;g++){
if((arr[j][0]==brr[g][0])&&(arr[j][1]==brr[g][1])&&(arr[j][2]==brr[g][2])&&(arr[j][3]==brr[g][3]))
cout<<g+1<<endl;
}
arr[m-1][0]=arr[j][0];arr[m-1][1]=arr[j][1];arr[m-1][2]=arr[j][2];arr[m-1][3]=arr[j][3];
for(int k=j+1;k<m-1;k++){
arr[k-1][0]=arr[k][0];arr[k-1][1]=arr[k][1];arr[k-1][2]=arr[k][2];arr[k-1][3]=arr[k][3];
}
num++;
break;
}
}
if(num==0)cout<<"IGNORED"<<endl;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71215.html
標籤:基礎類
