ZOJ Problem Set - 2480 Simplest Task in Windows
A typical windows platform may have several windows on the desktop. A user‘s operation may be as simple as a single click of the mouse. In the implementation of such a windows platform,one of the simplest tasks would be deciding which window had been clicked. Given a serial of windows,for each mouse click,decide which window had been clicked. Please notice that windows may overlap,and the window on top would receive the click rather than others. And,we consider a window to be clicked even if the mouse is just on its edge/corner. For the sake of simplicity,we assume that a window will not be activated to the top by any click.
The first part of input is a serial of windows. First an integer N (1 <= N <= 10) is given,indicating the number of windows. Then N lines follow,each containing four integers,x1,y1,x2,y2,(x1 < x2,y1 < y2) the coordinates of the upper-left and lower-right corners of a window. The windows are given in back-to-front order. N=0 signals the end of input. The second part of input is a serial of mouse clicks. First an integer M (1 <= M <= 50) is given,indicating the number of mouse clicks. Then M lines follow,each containing two integers,x and y,the coordinates of a mouse click.
For each mouse click in the input,output a single line containing the index (starting from 0) of the window which receives the click. If there is no such window,output "-1" in a line instead.
1
0
来源:?http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2480
?
方法一:我想的方法
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int win[15][4]; 5 int main() 6 { int N; 7 scanf("%d",&N); 8 while(N>0){ 9 for(int i=0;i<N;i++) 10 for(int j=0;j<4;j++) 11 win[i][j]=-1; 12 for(int i=0;i<N;i++){ 13 for(int j=0;j<4;j++){ 14 int temp; 15 scanf("%d",&temp); 16 win[i][j]=temp; 17 } 18 } 19 int M; 20 bool flag=0; 21 scanf("%d",&M); 22 for(int i=0;i<M;i++){ 23 flag=0; 24 int cx,cy; 25 scanf("%d",&cx); 26 scanf("%d",&cy); 27 for(int j=N-1;j>=0;j--){ 28 if(win[i][j]==-1) 29 continue; 30 if(cx<=win[j][2]&&cx>=win[j][0]&&cy<=win[j][3]&&cy>=win[j][1]){ 31 printf("%dn",j); 32 flag=1; 33 break; 34 } 35 } 36 if(!flag) printf("-1n"); 37 } 38 scanf("%d",&N); 39 } 40 return 0; 41 }
1、因为漏写了那个break纠结了蛮久的,所以以后碰到循环都稍微想一想什么时候该停下来
2、因为忘记初始化win数组也纠结了一会,所以以后碰到数组都要记得初始化
3、因为窗口输入顺序是back to front,注意逆序寻找窗口
?
方法二:
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int win[107][107]; 5 int main() 6 { int N; 7 scanf("%d",&N); 8 while(N>0){ 9 for(int i=0;i<107;i++){ 10 for(int j=0;j<107;j++) 11 win[i][j]=-1; 12 } 13 for(int i=0;i<N;i++){ 14 int l,d,r,u; 15 scanf("%d",&l); 16 scanf("%d",&d); 17 scanf("%d",&r); 18 scanf("%d",&u); 19 for(int j=l;j<=r;j++){ 20 for(int k=d;k<=u;k++) 21 win[j][k]=i; 22 } 23 } 24 int M; 25 bool flag=0; 26 scanf("%d",&M); 27 for(int i=0;i<M;i++){ 28 flag=0; 29 int cx,cy; 30 scanf("%d",&cx); 31 scanf("%d",&cy); 32 if(win[cx][cy]!=-1){ 33 printf("%dn",win[cx][cy]); 34 flag=1; 35 } 36 if(!flag) printf("-1n"); 37 } 38 scanf("%d",&N); 39 } 40 return 0; 41 } 根据别人的思路打的,这个思路也不错,用二维数组模拟一块屏幕,但是因为题目没有提及coordinate的xy取值范围,所以win的大小其实不好拿捏,但是这个107能AC (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 键盘快捷键 – Sublime 3切换注释命令在Windows中不起作用
- 在WINDOWS上编译Objective-C时出现错误“Foundation.h:找不
- windows-server-2012 – HP ProLiant MicroServer Gen 8 –
- 如何在WPF中使用Windows身份验证?
- windows – 在win XP命令行中同时将输出重定向到多个文件和
- Windows Media Player各个版本
- Windows如何在没有DNS的情况下解析主机名?
- .net – Windows Azure与Amazon EC2
- windows-server-2008-r2 – 根据瘦客户端位置为远程桌面选择
- windows – 如何使用cmake在vcproj文件中设置属性?