UVA11134 传说中的车 Fabled Rooks
首先,根据数据范围,可以得到这是一题O(N2)
考虑贪心
发现行和列是不相关的,于是可以把他们分成两个一维区间问题,也就是在线段中选出点使得每个线段中都有一个点,求出方案。
先考虑尽量不对后面造成影响,也就是留后路,所以前面要尽量选靠前的,按照右端点排序,分别处理。
最后记得按原序号输出。
#include<bits/stdc++.h> using namespace std; int n; bool b1[5005],b2[5005]; struct node{int x1,x2,y1,y2,x,y,ind;}a[5005]; bool cmp(node a,node b){return a.x2<b.x2;}//第一次排序 bool cmp1(node a,node b){return a.y2<b.y2;}//第二次 bool cmp2(node a,node b){return a.ind<b.ind;}//第三次 bool ccf(){//咳咳fill(b1,b1+n+1,0);fill(b2,b2+n+1,0);//清零使用数组for(int i=1;i<=n;i++){scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);//输入a[i].ind=i;记录序号}sort(a+1,a+n+1,cmp);//处理横坐标for(int i=1;i<=n;i++){int j=a[i].x1;for(;j<=a[i].x2;++j)//从前往后找if(!b1[j]){b1[j]=1,a[i].x=j;break;}if(j>a[i].x2)return false;//如果找不到就返回 }sort(a+1,a+n+1,cmp1);//处理纵坐标for(int i=1;i<=n;i++){int j=a[i].y1;for(;j<=a[i].y2;++j)if(!b2[j]){b2[j]=1,a[i].y=j;break;}if(j>a[i].y2)return false;}sort(a+1,a+n+1,cmp2);//按照原序号输出for(int i=1;i<=n;i++)printf("%d %d\n",a[i].x,a[i].y);return true; } int main(){while(~scanf("%d",&n)&&n)if(!ccf())puts("IMPOSSIBLE"); }
转载于:https://www.cnblogs.com/coder-cjh/p/11617059.html
UVA11134 传说中的车 Fabled Rooks相关推荐
- UVA11134传说中的车(放棋子)
题意: 给你一个n*n的棋盘,让你在棋盘上放n个棋子,要求是所有棋子不能相互攻击(同行或者同列就会攻击),并且每个棋子都有一个限制,那就是必须在给定的矩形r[i]里,输出每个棋子的位置,s ...
- 解题报告 之 UVA11134 Fabled Rooks
解题报告 之 UVA11134 Fabled Rooks Description Problem F: Fabled Rooks We would like to place n rooks, 1 ≤ ...
- 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 ...
- 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 ...
- UVa11134 Fabled Rooks(贪心算法)
问题:在n*n的棋盘中,放置n个车,要求对应的车在规定的矩形区间范围内,并且n个车不在同一行或者列上. 思路: 从x,y方向上分别确认n个车的位置,以x方向为例.根据区间的右端从小到大排列.然后在对车 ...
- 8-4 Fabled Rooks uva11134
题意:你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内 给出该矩形左上角坐标和右下角坐标四个点 必须满足放车的位置在矩形内 边上 ...
- uva11134 -Fabled Rooks
题意: 一个n*n的矩阵上放n个车,第i辆车在第i个区间上,每个区间给出左上角和右下角的坐标.任意两个车之间同行同列不能互相攻击,求这些车放置 的坐标. 思路: 第一眼看以为是N皇后的变形,后来发现车 ...
- UVA11134 Fabled Rooks
摘要: 贪心 链接 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- UVA 11134 - Fabled Rooks(经典贪心)
题目链接 https://cn.vjudge.net/problem/UVA-11134 [题意] 你的任务是在n×n的棋盘上放置n辆车,使得任意两辆车不互相攻击,且第i辆车在一个给定的矩形Ri以内. ...
最新文章
- 用vs2010编译vigra静态库及简单使用举例
- 新手零基础学习Python第一步,搭建开发环境!
- Python基本类型-列表
- Python:python语言中与时间有关的库函数简介、安装、使用方法之详细攻略
- PHP的composer报错 failed loading cafile stream: `C:\Users\Administrator\Ap pData\Local\Temp\opeB1C9.t
- SQL Server 行列转换(1)
- CodeForces - 1341F Nastya and Time Machine(dfs+构造)
- 编程基本功:工作完成之后,还有做好、做精、做美、做顶、做宗等境界
- 如何把RAR文件改成ZIP格式
- microsoft store 微软应用商店打不开?所有教程都尝试了一遍,居然是因为这个
- 余额宝提现测试点【杭州多测师】【杭州多测师_王sir】
- 基于Neo4j实现数据血缘管理
- PyTorch搭建LSTM实现时间序列预测(负荷预测)
- 一棵度为2的树和一棵二叉树有什么区别
- 联拓生物任命钱江担任中国区总经理
- EventBus底层实现原理
- 为了热爱Jeez,请停止在软件中使用正则表达式
- Windows CE 6.0完整版免费下载 下载地址
- 计算机类(计算机科学与技术)大学生职业生涯规划书
- Win7开启休眠功能的两种方法(步骤)