Uva 11134 Fabled Rooks(平面区间选点)

由于它是平面选点,可以将它确定矩形的对角坐标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);
				}
			}
			
		}

	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值