题目传送门

题目大意:
对于一个n*n的表格,往里面放入n个点,并满足:

  1. 每行每列有且只有一个点 (即每两个点之间都不同行,不同列)
  2. 每个点都在给定的矩形范围内 (第i个点只能在第i个矩形范围内,且一一对应)

输入:

  1. 多组样例,每组第一行输入一个整数n (n个点,n个矩形范围)
  2. 接下来n组矩形范围,4个整数分别为左上角右下角坐标
  3. n=0 时结束

解题思路:

  1. 题目中行与列之间互不影响,于是题目可以拆解为两个同样的一维问题:保证n个点都有位置且在对应矩形范围内,最后组成答案
  2. 贪心思想,优先级取决于每个范围的右边界(从小到大),落点位置从每个范围的左边开始

    代码实现:
#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(题意+思路+题解)相关推荐

  1. Fabled Rooks UVA - 11134

    比较简单的一道题,关键在于抓住一点:可以对行以及队列进行分开处理,行列的处理彼此之间是没有影响的.每次都选出满足条件的右边界最小的点,如果满足要求就继续下一轮的递归求解,如果不满足要求返回false结 ...

  2. Fabled Rooks UVA - 11134 

    很不错的题,利用贪心解决 代码参考别人的 #include<iostream> #include<cmath> #include<cstdio> #include& ...

  3. 例题 8-4 传送中的车(Fabled Rook, UVa 11134)

    原题链接:https://vjudge.net/problem/UVA-11134 分类:贪心法 备注:问题分解 可以看出两个维度上的问题是独立的,因此把二维问题化成一维问题 贪心思想看:https: ...

  4. 【例题 8-4 UVA - 11134】Fabled Rooks

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然把问题分解成两个子问题. x轴和y轴分别做. 即n个点要求第i个点在[li,ri]范围内.(ri<=n) 问是否可行. 按 ...

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

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

  7. UVa11134 Fabled Rooks(贪心算法)

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

  8. UVa 1225 Digit Counting 题解

    英文 Description Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts w ...

  9. 解题报告 之 UVA11134 Fabled Rooks

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

最新文章

  1. PLM与MDM的集成
  2. 新信号!阿里 AI 工程师趋于年轻化,高端AI人才严重短缺
  3. 神经网络理论基础及Python实现
  4. 不包含本位置值的累乘数组
  5. 内置host_浏览器内置对象应用实践
  6. Array的sort() 方法
  7. linux 时间 无法连接服务器地址,怎么解决linux访问不了ip地址问题?
  8. vue 侦听器侦听对象属性_Spring中的异步和事务性事件侦听器
  9. 视觉SLAM笔记(48) 局部地图
  10. [数据库]特殊符号对应的ascii和键盘字符的十六进制表示
  11. 对MVC设计模式的理解
  12. 在MOSS2007中使用收集反馈工作流
  13. 反思 大班 快乐的机器人_幼儿园大班体育课教案《小熊斗怪兽》含反思
  14. java爬取app_Java实现爬虫给App提供数据(Jsoup 网络爬虫)
  15. java看片_java – 如何正确查看片段
  16. 【百度大脑新品体验】人脸面部动作识别
  17. Python爬虫新手教程:微医挂号网医生数据抓取!
  18. 天晴。有微凉的风。
  19. 工艺夹具-减速箱体零件工艺规程及加工φ52H8孔夹具设计(论文+说明书+工艺卡+外文翻译+CAD图纸)
  20. 2D高德Android地图SDK 新手入门的com.amap.api.maps.MapView的坑

热门文章

  1. 955/965公司名单
  2. 第16周项目3--用函数指针调用函数(吃饭,睡觉,打豆豆)
  3. 如何做好开发组长工作
  4. SAP增强总结-第四代增强(BTE实例详解)
  5. win10查看服务器共享文件夹权限,win10共享文件夹win7没有权限访问的解决教程
  6. linux服务器定时执行python代码
  7. java poi 填充单元格_POI操作excel表格(建立工作薄、创建工作表、将数据填充到单元格中)...
  8. 优雅简洁的通用排版利器:MarkDown(支持公众号、知乎等场景渲染)
  9. utools沙拉查词插件 | windows划词翻译
  10. 9 9简单的数独游戏python_如何使用tkinter gui python创建一个9*9的数独生成器?