首先,根据数据范围,可以得到这是一题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相关推荐

  1. UVA11134传说中的车(放棋子)

    题意:       给你一个n*n的棋盘,让你在棋盘上放n个棋子,要求是所有棋子不能相互攻击(同行或者同列就会攻击),并且每个棋子都有一个限制,那就是必须在给定的矩形r[i]里,输出每个棋子的位置,s ...

  2. 解题报告 之 UVA11134 Fabled Rooks

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

  3. 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 ...

  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. UVa11134 Fabled Rooks(贪心算法)

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

  6. 8-4 Fabled Rooks uva11134

    题意:你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内  给出该矩形左上角坐标和右下角坐标四个点  必须满足放车的位置在矩形内  边上 ...

  7. uva11134 -Fabled Rooks

    题意: 一个n*n的矩阵上放n个车,第i辆车在第i个区间上,每个区间给出左上角和右下角的坐标.任意两个车之间同行同列不能互相攻击,求这些车放置 的坐标. 思路: 第一眼看以为是N皇后的变形,后来发现车 ...

  8. UVA11134 Fabled Rooks

    摘要: 贪心 链接 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  9. UVA 11134 - Fabled Rooks(经典贪心)

    题目链接 https://cn.vjudge.net/problem/UVA-11134 [题意] 你的任务是在n×n的棋盘上放置n辆车,使得任意两辆车不互相攻击,且第i辆车在一个给定的矩形Ri以内. ...

最新文章

  1. 用vs2010编译vigra静态库及简单使用举例
  2. 新手零基础学习Python第一步,搭建开发环境!
  3. Python基本类型-列表
  4. Python:python语言中与时间有关的库函数简介、安装、使用方法之详细攻略
  5. PHP的composer报错 failed loading cafile stream: `C:\Users\Administrator\Ap pData\Local\Temp\opeB1C9.t
  6. SQL Server 行列转换(1)
  7. CodeForces - 1341F Nastya and Time Machine(dfs+构造)
  8. 编程基本功:工作完成之后,还有做好、做精、做美、做顶、做宗等境界
  9. 如何把RAR文件改成ZIP格式
  10. microsoft store 微软应用商店打不开?所有教程都尝试了一遍,居然是因为这个
  11. 余额宝提现测试点【杭州多测师】【杭州多测师_王sir】
  12. 基于Neo4j实现数据血缘管理
  13. PyTorch搭建LSTM实现时间序列预测(负荷预测)
  14. 一棵度为2的树和一棵二叉树有什么区别
  15. 联拓生物任命钱江担任中国区总经理
  16. EventBus底层实现原理
  17. 为了热爱Jeez,请停止在软件中使用正则表达式
  18. Windows CE 6.0完整版免费下载 下载地址
  19. 计算机类(计算机科学与技术)大学生职业生涯规划书
  20. Win7开启休眠功能的两种方法(步骤)

热门文章

  1. 数据库课程设计-----------学生选课管理系统的设计
  2. Ruby+Selenium demo
  3. 技术指南:手机拍照身份证识别技术
  4. 【web安全】——floor报错注入
  5. python分析红楼梦中人物形象_红楼梦中贾宝玉的人物形象分析
  6. centos liunx升级内核
  7. opencv小问题大智慧
  8. 通过源码简要分析之Android消息机制Handler、Looper、MessageQueue运行机制
  9. 【愚公系列】2023年01月 .NET CORE工具案例-CS-Script脚本执行引擎
  10. 状压dp、数位dp、概率dp