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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

201403-2

2019-11-14 09:21:55
字體:
供稿:網(wǎng)友
問題描述

試題編號(hào):201403-2
試題名稱:窗口
時(shí)間限制:1.0s
內(nèi)存限制:256.0MB
問題描述:問題描述  在某圖形操作系統(tǒng)中,有 N 個(gè)窗口,每個(gè)窗口都是一個(gè)兩邊與坐標(biāo)軸分別平行的矩形區(qū)域。窗口的邊界上的點(diǎn)也屬于該窗口。窗口之間有層次的區(qū)別,在多于一個(gè)窗口重疊的區(qū)域里,只會(huì)顯示位于頂層的窗口里的內(nèi)容。  當(dāng)你點(diǎn)擊屏幕上一個(gè)點(diǎn)的時(shí)候,你就選擇了處于被點(diǎn)擊位置的最頂層窗口,并且這個(gè)窗口就會(huì)被移到所有窗口的最頂層,而剩余的窗口的層次順序不變。如果你點(diǎn)擊的位置不屬于任何窗口,則系統(tǒng)會(huì)忽略你這次點(diǎn)擊?! ‖F(xiàn)在我們希望你寫一個(gè)程序模擬點(diǎn)擊窗口的過程。輸入格式  輸入的第一行有兩個(gè)正整數(shù),即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10)  接下來 N 行按照從最下層到最頂層的順序給出 N 個(gè)窗口的位置。 每行包含四個(gè)非負(fù)整數(shù) x1, y1, x2, y2,表示該窗口的一對(duì)頂點(diǎn)坐標(biāo)分別為 (x1, y1) 和 (x2, y2)。保證 x1 < x2,y1 2?! 〗酉聛?M 行每行包含兩個(gè)非負(fù)整數(shù) x, y,表示一次鼠標(biāo)點(diǎn)擊的坐標(biāo)。  題目中涉及到的所有點(diǎn)和矩形的頂點(diǎn)的 x, y 坐標(biāo)分別不超過 2559 和  1439。輸出格式  輸出包括 M 行,每一行表示一次鼠標(biāo)點(diǎn)擊的結(jié)果。如果該次鼠標(biāo)點(diǎn)擊選擇了一個(gè)窗口,則輸出這個(gè)窗口的編號(hào)(窗口按照輸入中的順序從 1 編號(hào)到 N);如果沒有,則輸出"IGNORED"(不含雙引號(hào))。樣例輸入3 40 0 4 41 1 5 52 2 6 61 10 04 40 5樣例輸出211IGNORED樣例說明  第一次點(diǎn)擊的位置同時(shí)屬于第 1 和第 2 個(gè)窗口,但是由于第 2 個(gè)窗口在上面,它被選擇并且被置于頂層?! 〉诙吸c(diǎn)擊的位置只屬于第 1 個(gè)窗口,因此該次點(diǎn)擊選擇了此窗口并將其置于頂層?,F(xiàn)在的三個(gè)窗口的層次關(guān)系與初始狀態(tài)恰好相反了?! 〉谌吸c(diǎn)擊的位置同時(shí)屬于三個(gè)窗口的范圍,但是由于現(xiàn)在第 1 個(gè)窗口處于頂層,它被選擇?! ∽詈簏c(diǎn)擊的 (0, 5) 不屬于任何窗口。
問題分析:

問題的關(guān)鍵是創(chuàng)建窗口的結(jié)構(gòu)體后怎么表示窗口的順序。這里是用一個(gè)數(shù)組來表示窗口的順序,對(duì)應(yīng)的數(shù)組的值為窗口的編號(hào)。數(shù)組的下標(biāo)越小,對(duì)應(yīng)的編號(hào)窗口越靠前。

代碼:

#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個(gè)窗口 m個(gè)點(diǎn)擊事件 struct window{int winfo; //窗口的編號(hào) int x1,y1,x2,y2;};struct click{int x,y;};window w[12];click c[11];int order[11]; //紀(jì)錄窗口順序的數(shù)組 string ans[11];int length=0; int main(int argc, char *argv[]) {while(cin>>n>>m){//輸入n個(gè)窗口   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;}//初始化窗口順序的數(shù)組orderfor(int i=0;i<n;i++){order[i]=n-i;  //order[i]的值為對(duì)應(yīng)窗口的編號(hào) i越小對(duì)應(yīng)窗口的越靠前 //i == 0 窗口編號(hào) 2  既2號(hào)窗口在最前 } //輸入m個(gè)鼠標(biāo)點(diǎn)擊次數(shù)for(int i=0;i<m;i++){int tx,ty;cin>>tx>>ty;c[i].x=tx;c[i].y=ty;}//判斷m次點(diǎn)擊事件for(int i=0;i<m;i++){int winio=-1;//從窗口最上層開始判斷 int j;for(j=0;j<n;j++){ int temp_w=order[j];  //獲得當(dāng)前最靠上的窗口的編號(hào)  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次點(diǎn)擊到了這個(gè)窗口 //1.紀(jì)錄其窗口號(hào) winio=temp_w;//cout<<temp_w<<endl;//2.將此窗口移動(dòng)到最前 for(int p=j;p>0;p--) //要從后開始移動(dòng) 保證前面的數(shù)據(jù)不被覆蓋 {order[p]=order[p-1];}order[0]=temp_w;break;  }else{//i次點(diǎn)擊沒有點(diǎn)到此窗口 判斷下一個(gè)窗口 } }if(winio == -1){cout<<"IGNORED"<<endl;}else{cout<<winio<<endl;}}}return 0;}注意:在移動(dòng)數(shù)組時(shí),需要從被替代的位置開始移動(dòng),防止有效信息被覆蓋。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 屏东县| 龙川县| 马关县| 新沂市| 澜沧| 且末县| 东莞市| 绥棱县| 烟台市| 巴彦淖尔市| 顺平县| 基隆市| 九寨沟县| 临高县| 南安市| 德格县| 体育| 历史| 乌鲁木齐县| 上蔡县| 确山县| 中阳县| 武隆县| 鹿邑县| 海盐县| 乐亭县| 桂东县| 历史| 桦川县| 榆中县| 寿宁县| 旬阳县| 体育| 昌图县| 将乐县| 郴州市| 天等县| 马山县| 深水埗区| 临潭县| 寻乌县|