8-4 Fabled Rooks uva11134
题意:你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内 给出该矩形左上角坐标和右下角坐标四个点 必须满足放车的位置在矩形内 边上也行 如果无解输出IMPSSIBLE
行与列是独立的 所以可以分割成两个一模一样的子问题 贪心
要以右边界升序排序 我一开始按照左边界排序错了 举个例子 1-1 1-3 2-2 这样的话就会错 1-1 2-2 1-3才对
还有就是注意细节 sort 从一开始的话 都要加一,,,
#include<bits/stdc++.h> using namespace std; #define N 5010 int n,k; int vis[N]; struct node {int id;int x,y;int x1,x2,y1,y2;}chess[N];bool cmp1(node a,node b){return a.x2<b.x2||(a.x2==b.x2&&a.x1<b.x1);} bool cmp2(node a,node b){return a.y2<b.y2||(a.y2==b.y2&&a.y1<b.y1);} bool cmp3(node a,node b){return a.id<b.id;} int main() {while(cin>>n,n){int flag=1;for(int i=0;i<n;i++){chess[i].id=i;scanf("%d%d%d%d",&chess[i].x1,&chess[i].y1,&chess[i].x2,&chess[i].y2);}sort(chess,chess+n,cmp1);memset(vis,0,sizeof vis);for(int i=0;i<n;i++){int ok=0;for(int j=chess[i].x1;j<=chess[i].x2;j++){if(!vis[j]){ok=1;vis[j]=1;chess[i].x=j;break; }//把chess里面的i写成了j 强行将自己dubug了半个小时。。。 }if(!ok){flag=0;}}sort(chess,chess+n,cmp2);memset(vis,0,sizeof vis);for(int i=0;i<n;i++){int ok=0;for(int j=chess[i].y1;j<=chess[i].y2;j++){if(!vis[j]){ok=1;vis[j]=1;chess[i].y=j;break; }}if(!ok){flag=0;}}sort(chess,chess+n,cmp3);if(flag)for(int i=0;i<n;i++)printf("%d %d\n",chess[i].x,chess[i].y);else printf("IMPOSSIBLE\n");} }
LRJ的代码 更慢
#include<cstdio> #include<cstring> #include <algorithm> using namespace std;// solve 1-D problem: find c so that a[i] <= c[i] <= b[i] (0 <= i < n) bool solve(int *a, int *b, int *c, int n) {fill(c, c+n, -1);for(int col = 1; col <= n; col++) {// find a rook with smalleset b that is not yet assignedint rook = -1, minb = n+1;for(int i = 0; i < n; i++)if(c[i] < 0 && b[i] < minb && col >= a[i]) { rook = i; minb = b[i]; }if(rook < 0 || col > minb) return false;c[rook] = col;}return true; }const int maxn = 5000 + 5; int n, x1[maxn], y1[maxn], x2[maxn], y2[maxn], x[maxn], y[maxn];int main() {while(scanf("%d", &n) == 1 && n) {for (int i = 0; i < n; i++)scanf("%d%d%d%d", &x1[i], &y1[i], &x2[i], &y2[i]);if(solve(x1, x2, x, n) && solve(y1, y2, y, n))for (int i = 0; i < n; i++) printf("%d %d\n", x[i], y[i]);elseprintf("IMPOSSIBLE\n");}return 0; }
转载于:https://www.cnblogs.com/bxd123/p/10432674.html
8-4 Fabled Rooks uva11134相关推荐
- 解题报告 之 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方向为例.根据区间的右端从小到大排列.然后在对车 ...
- UVA11134 Fabled Rooks
摘要: 贪心 链接 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- UVA11134 传说中的车 Fabled Rooks
首先,根据数据范围,可以得到这是一题O(N2) 考虑贪心 发现行和列是不相关的,于是可以把他们分成两个一维区间问题,也就是在线段中选出点使得每个线段中都有一个点,求出方案. 先考虑尽量不对后面造成影响 ...
- uva11134 -Fabled Rooks
题意: 一个n*n的矩阵上放n个车,第i辆车在第i个区间上,每个区间给出左上角和右下角的坐标.任意两个车之间同行同列不能互相攻击,求这些车放置 的坐标. 思路: 第一眼看以为是N皇后的变形,后来发现车 ...
- uva 11134 Fabled Rooks
原题: We would like to place n rooks, 1 ≤ n ≤ 5000, on a n × n board subject to the following restrict ...
- UVA 11134 - Fabled Rooks(经典贪心)
题目链接 https://cn.vjudge.net/problem/UVA-11134 [题意] 你的任务是在n×n的棋盘上放置n辆车,使得任意两辆车不互相攻击,且第i辆车在一个给定的矩形Ri以内. ...
最新文章
- 微信小程序textArea组件字数限制
- Java 8 Friday:让我们弃用那些旧版库
- 百家号 不被推荐,原因:将旧闻冒充新闻发布,请修改后重新发布
- java包裹邮费计算_GitHub - honghailiang/FreightSystem: 基于Java Swing编写的简易运费计算工具...
- 基于JAVA+SpringMVC+Mybatis+MYSQL的医院预约挂号系统
- aix 添加lv 大小
- 一步一步写算法(之图添加和删除)
- 进阶03 System、StringBuilder类
- android 不限速迅雷,安卓iOS,Windows和Mac四大系统迅雷不限速神器,今天全部解决了...
- 使用java实现MD5码算法
- 华为ME909s-821a开启LED状态指示灯
- 数据库学习(四)—SQL数据查询01(简单方法条件查询)
- 指数的增长和衰退问题
- 恢复Outlook 2010/2007已被删除邮件的方法
- 天平游码读数例题_天平游码怎么读数?
- Java EE结构理解 与Dao模式 no7.
- 如何轻松的破解excel 2016工作表密码
- VS2013 编译错误类型: 必须定义入口点
- GDPR从数据主体处收集信息时的信息提供,应包含哪些内容?怎样做才合规?
- UG编程编辑边倒圆技巧详细分享
热门文章
- Linux 命令之 rpmbuild -- 用于创建 rpm 格式的二进制软件包和源码软件包
- linux系统下安装jdk教程
- python的循环语句机制_Python-for循环的内部机制
- windows查看器无法打开图片_关于windows微软商城无法打开 错误代码0x80004003问题...
- python回归预测例子_案例实战 | 逻辑回归实现客户流失预测(附Python代码与源数据)...
- yxcms安装环境php,Windows7下PHP开发环境安装配置图文方法
- 用c语言产生大素数,C语言实现寻找大素数
- python读取sqlserver的数据_Python:使用并发未来进程P读取sqlserver数据
- ProtoBuff3.0.0在Ubuntu上安装
- 什么是RS232/RS485转换器?