Uva 11134 Fabled Rooks(平面區間選點)
阿新 • • 發佈:2019-02-03
由於它是平面選點,可以將它確定矩形的對角座標x1,y1,x2,y2,,拆成x軸座標x1,y1 和y軸座標x2,y2;
然後分別對x軸和y軸區間選點,只要兩個都可以選完,那就說明在它確定的平面上也是可以選出的。需注意輸出時還要還原順序輸出。
import java.util.*; class weizhi implements Comparable<weizhi> { int x,y,id; public int compareTo(weizhi A) { if(this.y<A.y) return -1; else if(this.y>A.y) return 1; else { if(this.x<A.x) return -1; else return 1; } } } public class Main { public static int n,bzx[]=new int[5005],bzy[]=new int[5005]; static weizhi zbx[]=new weizhi[5005],zby[]=new weizhi[5005],ans[]=new weizhi[5005]; public static void main(String[] args) { Scanner in=new Scanner(System.in); int i,j; boolean flag = true; while(in.hasNextInt()) { n=in.nextInt(); if(n==0) break; for(i=0;i<n;i++) { zbx[i]=new weizhi(); zby[i]=new weizhi(); zbx[i].x=in.nextInt(); zby[i].x=in.nextInt(); zbx[i].y=in.nextInt(); zby[i].y=in.nextInt(); zbx[i].id=i; zby[i].id=i; } Arrays.sort(zbx,0,n); Arrays.sort(zby,0,n); for(i=0;i<5005;i++) {bzx[i]=0;bzy[i]=0;} for(i=0;i<n;i++) { flag=true; for(j=zbx[i].x;j<=zbx[i].y;j++) { if(bzx[j]==0) {bzx[j]=1; zbx[i].y=zbx[i].id; zbx[i].x=j;flag=false; break;} } if(flag) {System.out.println("IMPOSSIBLE");break;} flag=true; for(j=zby[i].x;j<=zby[i].y;j++) { if(bzy[j]==0) {bzy[j]=1; zby[i].y=zby[i].id; zby[i].x=j; flag=false; break;} } if(flag) {System.out.println("IMPOSSIBLE");break;} } if(!flag) { Arrays.sort(zbx,0,n); Arrays.sort(zby,0,n); for(i=0;i<n;i++) { System.out.println(zbx[i].x+" "+zby[i].x); } } } } }