uva11134 -Fabled Rooks
题意:
一个n*n的矩阵上放n个车,第i辆车在第i个区间上,每个区间给出左上角和右下角的坐标。任意两个车之间同行同列不能互相攻击,求这些车放置
的坐标。
思路:
第一眼看以为是N皇后的变形,后来发现车子斜上角不会相互攻击。则行列不会相互影响,即该问题可分别分解求行,求列的位置的问题,和上一题uva1422的做法一样,按左区间排序后通过优先级队列按右区间的优先级来做。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;const int N = 5005;
int n;
struct node {int l, r, id;friend bool operator < (node a, node b) {return a.r > b.r;}
}x[N],y[N],ans[N];
int cmp(node a, node b) {return a.l < b.l;
}int solve() {priority_queue<node> Q;int cur = 0;for (int i = 1; i <= n; i++) {while (cur < n && x[cur].l <= i)Q.push(x[cur++]);if (Q.empty())return false;node front = Q.top();Q.pop();if (front.r < i)return false;ans[front.id].l = i;}cur = 0;for (int i = 1; i <= n; i++) {while (cur < n && y[cur].l <= i)Q.push(y[cur++]);if (Q.empty())return false; node front = Q.top();Q.pop();if (front.r < i)return false;ans[front.id].r = i;}for (int i = 0; i < n; i++)printf("%d %d\n", ans[i].l, ans[i].r);return true;
}
int main() {while (scanf("%d", &n) && n) {for (int i = 0; i < n; i++) {scanf("%d%d%d%d", &x[i].l, &y[i].l, &x[i].r, &y[i].r);x[i].id = y[i].id = i;}sort(x, x + n, cmp);sort(y, y + n, cmp);if (!solve())printf("IMPOSSIBLE\n");}return 0;
}
uva11134 -Fabled Rooks相关推荐
- 解题报告 之 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 ...
- 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 ...
- 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 ...
- 8-4 Fabled Rooks uva11134
题意:你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内 给出该矩形左上角坐标和右下角坐标四个点 必须满足放车的位置在矩形内 边上 ...
- UVA11134 传说中的车 Fabled Rooks
首先,根据数据范围,可以得到这是一题O(N2) 考虑贪心 发现行和列是不相关的,于是可以把他们分成两个一维区间问题,也就是在线段中选出点使得每个线段中都有一个点,求出方案. 先考虑尽量不对后面造成影响 ...
- 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以内. ...
最新文章
- 参加UI培训后可以找什么工作
- 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)
- 力扣长度最小的子数组
- 存储池与存储卷,使用virt-install创建虚拟机
- LeetCode 159. 至多包含两个不同字符的最长子串 (滑动窗口哈希表)
- 求有向图中两点最短距离java_Java 迪杰斯特拉算法实现查找最短距离
- 求一个序列中,第k个数
- 数据库(SQL)学习——基础篇一:初识数据库
- javascript 学习指南--语法
- 基于Android图书馆借阅系统app毕业设计
- ubuntu16.04 禁用Guest用户
- 暗刺,高并发五个利器
- 当华为云WeLink遇上P40,多屏协同全场景办公有多神奇?
- 如何成为一个iOS开发者
- 移远BC20模组使用LwM2M协议接入华为IoT平台(NB-IoT专栏—进阶篇2)
- tplink显示网络连接已断开_TP-link无线路由器无法上网排查方案及解决办法(图文教程)...
- 火绒能更新服务器系统么,火绒自动升级频率是怎么样的?
- 弘辽科技:淘宝启动中小型商家普惠计划
- Flash CS5 XFL文件格式解读
- 工厂车间设备智能化管理系统软件