Fabled Rooks UVA - 11134(题意+思路+题解)
题目传送门
题目大意:
对于一个n*n的表格,往里面放入n个点,并满足:
- 每行每列有且只有一个点 (即每两个点之间都不同行,不同列)
- 每个点都在给定的矩形范围内 (第i个点只能在第i个矩形范围内,且一一对应)
输入:
- 多组样例,每组第一行输入一个整数n (n个点,n个矩形范围)
- 接下来n组矩形范围,4个整数分别为左上角和右下角坐标
- n=0 时结束
解题思路:
- 题目中行与列之间互不影响,于是题目可以拆解为两个同样的一维问题:保证n个点都有位置且在对应矩形范围内,最后组成答案
- 贪心思想,优先级取决于每个范围的右边界(从小到大),落点位置从每个范围的左边开始
代码实现:
#include<bits/stdc++.h>
using namespace std;
#define FREIN() freopen("in.txt","r",stdin)
#define FREON() freopen("out.txt","w",stdout)
typedef long long LL;
const int maxn = 5000 + 5;
struct Node
{int n1, n2;int num;
}r[maxn], c[maxn];int n;
int x[maxn], y[maxn];bool cmp(Node a, Node b){return a.n2 < b.n2;
}bool solve(struct Node * t, int * d)
{int q[maxn] = {0};sort(t, t+n, cmp);int flag = false;int f[maxn] = {0};for(int i=0; i<n; ++i){flag = false;for(int j = t[i].n1; j <= t[i].n2; ++j){if(q[j] == 0){q[j] = 1;d[t[i].num] = j;flag = true;break;}}if(!flag)return false;}return true;
}int main()
{ios::sync_with_stdio(false);//FREIN();while(cin >> n && n){for(int i=0; i<n; ++i){cin >> r[i].n1 >> c[i].n1 >> r[i].n2 >> c[i].n2;r[i].num = i;c[i].num = i;}if(solve(r, x) && solve(c, y)){for(int i=0; i<n; ++i ){cout << x[i] << " " << y[i] << endl;}}elsecout << "IMPOSSIBLE" << endl;}
}
Fabled Rooks UVA - 11134(题意+思路+题解)相关推荐
- Fabled Rooks UVA - 11134
比较简单的一道题,关键在于抓住一点:可以对行以及队列进行分开处理,行列的处理彼此之间是没有影响的.每次都选出满足条件的右边界最小的点,如果满足要求就继续下一轮的递归求解,如果不满足要求返回false结 ...
- Fabled Rooks UVA - 11134
很不错的题,利用贪心解决 代码参考别人的 #include<iostream> #include<cmath> #include<cstdio> #include& ...
- 例题 8-4 传送中的车(Fabled Rook, UVa 11134)
原题链接:https://vjudge.net/problem/UVA-11134 分类:贪心法 备注:问题分解 可以看出两个维度上的问题是独立的,因此把二维问题化成一维问题 贪心思想看:https: ...
- 【例题 8-4 UVA - 11134】Fabled Rooks
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然把问题分解成两个子问题. x轴和y轴分别做. 即n个点要求第i个点在[li,ri]范围内.(ri<=n) 问是否可行. 按 ...
- 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(贪心)
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方向为例.根据区间的右端从小到大排列.然后在对车 ...
- UVa 1225 Digit Counting 题解
英文 Description Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts w ...
- 解题报告 之 UVA11134 Fabled Rooks
解题报告 之 UVA11134 Fabled Rooks Description Problem F: Fabled Rooks We would like to place n rooks, 1 ≤ ...
最新文章
- PLM与MDM的集成
- 新信号!阿里 AI 工程师趋于年轻化,高端AI人才严重短缺
- 神经网络理论基础及Python实现
- 不包含本位置值的累乘数组
- 内置host_浏览器内置对象应用实践
- Array的sort() 方法
- linux 时间 无法连接服务器地址,怎么解决linux访问不了ip地址问题?
- vue 侦听器侦听对象属性_Spring中的异步和事务性事件侦听器
- 视觉SLAM笔记(48) 局部地图
- [数据库]特殊符号对应的ascii和键盘字符的十六进制表示
- 对MVC设计模式的理解
- 在MOSS2007中使用收集反馈工作流
- 反思 大班 快乐的机器人_幼儿园大班体育课教案《小熊斗怪兽》含反思
- java爬取app_Java实现爬虫给App提供数据(Jsoup 网络爬虫)
- java看片_java – 如何正确查看片段
- 【百度大脑新品体验】人脸面部动作识别
- Python爬虫新手教程:微医挂号网医生数据抓取!
- 天晴。有微凉的风。
- 工艺夹具-减速箱体零件工艺规程及加工φ52H8孔夹具设计(论文+说明书+工艺卡+外文翻译+CAD图纸)
- 2D高德Android地图SDK 新手入门的com.amap.api.maps.MapView的坑
热门文章
- 955/965公司名单
- 第16周项目3--用函数指针调用函数(吃饭,睡觉,打豆豆)
- 如何做好开发组长工作
- SAP增强总结-第四代增强(BTE实例详解)
- win10查看服务器共享文件夹权限,win10共享文件夹win7没有权限访问的解决教程
- linux服务器定时执行python代码
- java poi 填充单元格_POI操作excel表格(建立工作薄、创建工作表、将数据填充到单元格中)...
- 优雅简洁的通用排版利器:MarkDown(支持公众号、知乎等场景渲染)
- utools沙拉查词插件 | windows划词翻译
- 9 9简单的数独游戏python_如何使用tkinter gui python创建一个9*9的数独生成器?