题目链接 https://cn.vjudge.net/problem/UVA-11134

【题意】
你的任务是在n×n的棋盘上放置n辆车,使得任意两辆车不互相攻击,且第i辆车在一个给定的矩形Ri以内。

【输入格式】
多组输入。第一行为整数n(1<=n<=5000),以下n行每行4个整数xli,yli,xri,yri(1<=xli<=xri<=n,1<=yli<=yri<=n)描述一个矩形,其中(xli,xri)是左上角坐标,(xri,yri)是右下角坐标。第i个车的位置必须满足xli<=x<=xri,yli<=y<=yri,输入结束标志为n=0

【输出格式】
无解输出”IMPOSSIBLE”,否则依次按照输入顺序输出n个车的坐标,输出任意解即可。

【思路】
首先行列可以分开考虑,它们互不影响,单单考虑行的话,其实就是给定若干个区间,然后给每个区间都分配一个点,使得点不重复的情况下都能落在相应区间中,可以对区间按右端点升序排序,右端点相等时按左端点升序排序,从左往右看每个区间,尽量往区间的左端点分配即可.

#include<bits/stdc++.h>
using namespace std;const int maxn=5050;struct node{int id,le,ri;node(int i,int l,int r):id(i),le(l),ri(r){}bool operator<(const node& e)const{if(ri==e.ri) return le<e.le;return ri<e.ri;}
};int n;
vector<node>x,y;
bool used[maxn];
int ansx[maxn],ansy[maxn];int main(){while(scanf("%d",&n)==1 && n){x.clear();y.clear();for(int i=0;i<n;++i){int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);x.push_back(node(i,x1,x2));y.push_back(node(i,y1,y2));}bool ok=1;sort(x.begin(),x.end());memset(used,0,sizeof(used));for(int i=0;i<x.size();++i){bool flag=0;for(int j=x[i].le;j<=x[i].ri;++j){if(!used[j]){ flag=1;used[j]=1;ansx[x[i].id]=j;break; }}if(!flag){ ok=0;break; }}if(ok){sort(y.begin(),y.end());memset(used,0,sizeof(used));for(int i=0;i<y.size();++i){bool flag=0;for(int j=y[i].le;j<=y[i].ri;++j){if(!used[j]){ flag=1;used[j]=1;ansy[y[i].id]=j;break;}}if(!flag){ ok=0;break; }}}if(!ok) puts("IMPOSSIBLE");else for(int i=0;i<n;++i){ printf("%d %d\n",ansx[i],ansy[i]); }}return 0;
}

转载于:https://www.cnblogs.com/wafish/p/10465270.html

UVA 11134 - Fabled Rooks(经典贪心)相关推荐

  1. uva 11134——Fabled Rooks

    题意:给定一个n*n的期棋盘放n个车,要求任意车之间不能相互攻击,并且每个车都在相应的方框内. 思路:贪心.因为没有对角线的条件约束,所以放的行号和列号没有影响.那么单独求出来行号和列号即可.对于每一 ...

  2. UVA 11134 Fabled Rooks

    题目大意:给出n行n列的表,输入4个数字代表点的范围,范围是一个矩形,前俩个数字代表矩形左上角坐标,后俩个数字代表右下角坐标,要求取的点所在行和所在列与其他点不相交 解题思路:因为行和列不冲突,所以将 ...

  3. uva 11134 Fabled Rooks

    原题: We would like to place n rooks, 1 ≤ n ≤ 5000, on a n × n board subject to the following restrict ...

  4. 11134 - Fabled Rooks

    Fabled Rooks We would like to place nn rooks, 1≤n≤50001 \le n \le 5000, on a n×nn \times n board sub ...

  5. UVA 11134 Fabled Rook 枚举 multiset加速

    题意说的是给出一个长度为n的国际象棋的棋盘,然后给出n个车的可以放置的范围,范围是一个矩形,用左上和右下两对数来描述,问是否存在方式使得每个车都放在他自己的范围里面且相互不冲突 这里x方向和y方向是不 ...

  6. UVa11134 - Fabled Rooks(贪心)

    11134 - Fabled Rooks We would like to place nn rooks, 1≤n≤50001 ≤ n ≤ 5000, on a n×nn × n board subj ...

  7. UVa11134 Fabled Rooks(贪心算法)

    问题:在n*n的棋盘中,放置n个车,要求对应的车在规定的矩形区间范围内,并且n个车不在同一行或者列上. 思路: 从x,y方向上分别确认n个车的位置,以x方向为例.根据区间的右端从小到大排列.然后在对车 ...

  8. 解题报告 之 UVA11134 Fabled Rooks

    解题报告 之 UVA11134 Fabled Rooks Description Problem F: Fabled Rooks We would like to place n rooks, 1 ≤ ...

  9. 【经典贪心练习】金银岛

    [贪心练习]金银岛 哈喽,大家好,我是赏月君,今天做一下经典贪心算法的题目--金银岛,废话少说,上题目. 题目描述 某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝 ...

最新文章

  1. $.ajax居然触发popstate事件?
  2. SonarQube的安装、配置与使用
  3. 关于空值null的排序问题 mysql 和oracle
  4. Linux关闭防火墙详述
  5. 2018最新大神教你用Python玩转数据视频教程
  6. 小程序 移植 云开发_使用Kubernetes探索跨云的应用程序可移植性
  7. 转义字符html识别吗,HTML_谈谈html转义字符如何通过代码识别,偶尔会在数据中看到诸如#3 - phpStudy...
  8. excel服务器没有响应怎么办,勤哲Excel服务器技术支持|Excel服务器常见问题解答...
  9. [转载]一个图形爱好者的书架/白话说学计算机图形学
  10. java简单图书馆管理系统_简单 图书馆管理系统 Java+Oracle
  11. PhotoShop如何给字体添加下划线
  12. pkg打包node项目文件
  13. 一、ODI教程--ODI的介绍
  14. 滤镜怎么调好看?分享给图片调色的教程
  15. flash 外国小游戏教程网站
  16. ARM7 ARM 11
  17. Nginx 实战-负载均衡
  18. docker容器虚拟化网络概述
  19. Henry前端笔记之 函数封装
  20. XCTF-*CTF2022-Alice系列挑战write up

热门文章

  1. 基于Living Atlas数据为木里山体滑坡敏感性建模
  2. Pell方程初识以及技巧性的求解Pell方程整数解(附带手推详细证明)
  3. 购买新款macbook pro,现在买还是等双十一?
  4. DB2 sequence 获取下一个值
  5. 1、请简要介绍下SVM。
  6. 两点之间的最短距离是?
  7. 【bzoj2360】【cstc2011】【幸福路径】【倍增+floyd】
  8. python sphinx_Python Sphinx使用踩坑记录
  9. 19-10-15(msgbox、inputbox、注释)
  10. 国内支持原生android吗,定制安卓和原生Android到底有哪些不同之处?彻底真相了...