問題描述 在某圖形操作系統中,有 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
我的源代碼:
#include
int main()
{
int N,M,i,j,k;
scanf("%d %d",&N,&M);
struct Window
{
int floor;
int x1;
int y1;
int x2;
int y2;
}temp,W[N];
struct CLICK
{
int x;
int y;
bool flag;
}c[M];
for(i=0;i
{
W[i].floor=i+1;
scanf("%d %d %d %d",&W[i].x1,&W[i].y1,&W[i].x2,&W[i].y2);
}
for(i=0;i
{
scanf("%d %d",&c[i].x,&c[i].y);
c[i].flag=0;
}
for(i=0;i
{
for(j=N-1;j>=0;j--)
{
if((c[i].x>=W[j].x1)&&(c[i].x<=W[j].x2)&&(c[i].y>=W[j].y1)&&(c[i].y<=W[j].y2))
{
c[i].flag=1;
printf("%d\n",W[j].floor);
temp=W[j];
for(k=j+1;k<N;k++)
{
W[k-1]=W[k];
}
W[N-1]=temp;
break;
}
}
if(c[i].flag==0)
{
printf("IGNORED\n");
}
}
return 0;
}
我知道錯誤了,將flag由bool型改成int型,就可以了。C語言中沒有bool型