• 【UVA11134】传说中的车


    横纵坐标互不影响,所以问题转化到一维:在n个区间中每个区间选一个数,n个数都被选一次

    将区间按右端点排序,枚举区间,每个区间选最靠左的没被选过的点

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    const int MAXN=5010;
    
    int n,ansx[MAXN],ansy[MAXN];
    
    struct Range{
    	int l,r,id;
    }a[MAXN],b[MAXN];
    
    inline bool cmp(Range x, Range y){
    	return x.r<y.r;
    }
    
    bool used[MAXN];
    
    int main()
    {
    	while(1){
    		scanf("%d",&n);
    		if(n==0) break;
    		for(int i=1;i<=n;++i){
    			scanf("%d%d%d%d",&a[i].l,&b[i].l,&a[i].r,&b[i].r);
    			a[i].id=b[i].id=i;
    		}
    		bool flag;
    		memset(used,0,sizeof(used));
    		sort(a+1,a+1+n,cmp);
    		for(int i=1;i<=n;++i){
    			flag=0;
    			for(int j=a[i].l;j<=a[i].r;++j)
    				if(!used[j]){
    					used[j]=flag=1;
    					ansx[a[i].id]=j;
    					break;
    				}
    			if(!flag) break;
    		}
    		if(!flag){
    			puts("IMPOSSIBLE");
    			continue;
    		}
    		memset(used,0,sizeof(used));
    		sort(b+1,b+1+n,cmp);
    		for(int i=1;i<=n;++i){
    			flag=0;
    			for(int j=b[i].l;j<=b[i].r;++j)
    				if(!used[j]){
    					used[j]=flag=1;
    					ansy[b[i].id]=j;
    					break;
    				}
    			if(!flag) break;
    		}
    		if(!flag){
    			puts("IMPOSSIBLE");
    			continue;
    		}
    		for(int i=1;i<=n;++i)
    			printf("%d %d
    ",ansx[i],ansy[i]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    问题python3中的tablib库报错“'Dataset' object has no attribute 'xlsx' tablib”
    下载并运行 Jenkins
    mac上卸载jdk
    Macbook pro 切换显卡
    Mac 安装和使用MongoDB
    PEP8 规范
    完全卸载Xcode
    mysql重置密码
    安装vue mac 不成功
    error:Cannot pull with rebase
  • 原文地址:https://www.cnblogs.com/yjkhhh/p/11629326.html
Copyright © 2020-2023  润新知