CCF之窗口

来源:互联网 发布:搭建php运行环境 编辑:程序博客网 时间:2024/05/16 06:54

用一个数组记录在第i层上是原始输入的第几号窗口

创建一个新类,并创建一个保存该类对象的数组,用以保存每一个窗口的横坐标和纵坐标

基本思路就是这样,点击到了哪个窗口,就把那个窗口放到最上层然后把其他以前在它以上的窗口分别向下移动一个位置。

直接上代码:

package Online_pra;import java.util.Scanner;public class CCF1403_2 {public static square s[];public static void main(String args[]) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();//该数组用来存储窗口的对应位置,0号位置是最顶层窗口,n-1号位置是最底层窗口int a[]=new int[n];  for(int i=0;i<n;i++) a[i]=n-i;int m=scan.nextInt();//用来存储输入的窗口坐标s=new square[n]; for(int i=0;i<n;i++) {int x1=scan.nextInt();int y1=scan.nextInt();int x2=scan.nextInt();int y2=scan.nextInt();s[n-1-i]=new square(x1,y1,x2,y2);}for(int i=0;i<m;i++) {int posx=scan.nextInt();int posy=scan.nextInt();boolean flag=false;for(int j=0;j<n;j++) {if(click(j,posx,posy)) {//表示触碰到了最上一层的相应位置flag=true;System.out.println(a[j]);square temp=s[j];int temp1=a[j];for(int k=j;k>=1;k--) {a[k]=a[k-1];s[k]=s[k-1];}a[0]=temp1;s[0]=temp;break;}}//for(int j=0;j<n;j++) {//System.out.print(a[j]+" ");////}//System.out.println();//for(int j=0;j<n;j++) {//System.out.print(s[j].getX1()+" "+s[j].getY1()+" "+s[j].getX2()+" "+s[j].getY2());//System.out.println();//}if(!flag)System.out.println("IGNORED");}}public static boolean click(int index,int posx,int posy) {int x1=s[index].getX1();int y1=s[index].getY1();int x2=s[index].getX2();int y2=s[index].getY2();if(x1<=posx&&posx<=x2&&y1<=posy&&posy<=y2)return true;elsereturn false;}}class square{private int x1;private int y1;private int x2;private int y2;public square(int x1, int y1, int x2, int y2) {super();this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;}public int getX1() {return x1;}public void setX1(int x1) {this.x1 = x1;}public int getY1() {return y1;}public void setY1(int y1) {this.y1 = y1;}public int getX2() {return x2;}public void setX2(int x2) {this.x2 = x2;}public int getY2() {return y2;}public void setY2(int y2) {this.y2 = y2;}}

中间注释掉的代码是用来测试的,便于及时发现问题。

原创粉丝点击