国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

201403-2

2019-11-14 08:51:58
字體:
來源:轉載
供稿:網友
問題描述

試題編號:201403-2
試題名稱:窗口
時間限制:1.0s
內存限制:256.0MB
問題描述:問題描述  在某圖形操作系統中,有 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 40 0 4 41 1 5 52 2 6 61 10 04 40 5樣例輸出211IGNORED樣例說明  第一次點擊的位置同時屬于第 1 和第 2 個窗口,但是由于第 2 個窗口在上面,它被選擇并且被置于頂層。  第二次點擊的位置只屬于第 1 個窗口,因此該次點擊選擇了此窗口并將其置于頂層。現在的三個窗口的層次關系與初始狀態恰好相反了。  第三次點擊的位置同時屬于三個窗口的范圍,但是由于現在第 1 個窗口處于頂層,它被選擇。  最后點擊的 (0, 5) 不屬于任何窗口。
問題分析:

問題的關鍵是創建窗口的結構體后怎么表示窗口的順序。這里是用一個數組來表示窗口的順序,對應的數組的值為窗口的編號。數組的下標越小,對應的編號窗口越靠前。

代碼:

#include <iostream>using namespace std;/* run this PRogram using the console pauser or add your own getch, system("pause") or input loop */int n,m;  //n個窗口 m個點擊事件 struct window{int winfo; //窗口的編號 int x1,y1,x2,y2;};struct click{int x,y;};window w[12];click c[11];int order[11]; //紀錄窗口順序的數組 string ans[11];int length=0; int main(int argc, char *argv[]) {while(cin>>n>>m){//輸入n個窗口   for(int i=1;i<=n;i++){int tx1,ty1,tx2,ty2;cin>>tx1>>ty1>>tx2>>ty2;w[i].x1=tx1;w[i].y1=ty1;w[i].x2=tx2;w[i].y2=ty2;w[i].winfo =i;}//初始化窗口順序的數組orderfor(int i=0;i<n;i++){order[i]=n-i;  //order[i]的值為對應窗口的編號 i越小對應窗口的越靠前 //i == 0 窗口編號 2  既2號窗口在最前 } //輸入m個鼠標點擊次數for(int i=0;i<m;i++){int tx,ty;cin>>tx>>ty;c[i].x=tx;c[i].y=ty;}//判斷m次點擊事件for(int i=0;i<m;i++){int winio=-1;//從窗口最上層開始判斷 int j;for(j=0;j<n;j++){ int temp_w=order[j];  //獲得當前最靠上的窗口的編號  if((c[i].x <= w[temp_w].x2 && c[i].x >= w[temp_w].x1) &&  (c[i].y <= w[temp_w].y2 && c[i].y >= w[temp_w].y1)) {//i次點擊到了這個窗口 //1.紀錄其窗口號 winio=temp_w;//cout<<temp_w<<endl;//2.將此窗口移動到最前 for(int p=j;p>0;p--) //要從后開始移動 保證前面的數據不被覆蓋 {order[p]=order[p-1];}order[0]=temp_w;break;  }else{//i次點擊沒有點到此窗口 判斷下一個窗口 } }if(winio == -1){cout<<"IGNORED"<<endl;}else{cout<<winio<<endl;}}}return 0;}注意:在移動數組時,需要從被替代的位置開始移動,防止有效信息被覆蓋。


上一篇:java異常分類

下一篇:1036. Boys vs Girls (25)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 利川市| 漯河市| 华阴市| 论坛| 嘉峪关市| 长岛县| 福清市| 晋宁县| 宁河县| 兰溪市| 呈贡县| 都江堰市| 靖安县| 开化县| 北辰区| 隆安县| 界首市| 调兵山市| 宁乡县| 铁岭县| 峡江县| 凌海市| 石阡县| 昌宁县| 天柱县| 贵定县| 兴安县| 乐山市| 略阳县| 天等县| 云阳县| 永宁县| 元谋县| 莲花县| 武安市| 宁明县| 东莞市| 宜宾县| 陕西省| 巴马| 安泽县|