UVA - 11134

We would like to place n rooks, 1 ≤ n ≤ 5000, on a n × n board subject to the following restrictions

  • The i-th rook can only be placed within the rectan- gle given by its left-upper corner (xli,yli) and its right- lower corner (xri,yri), where 1 ≤ i ≤ n, 1 ≤ xli ≤ xri ≤n,1≤yli ≤yri ≤n.

  • No two rooks can attack each other, that is no two rooks can occupy the same column or the same row.

    Input

    The input consists of several test cases. The first line of each
    of them contains one integer number, n, the side of the board. n lines follow giving the rectangles
    where the rooks can be placed as described above. The i-th line among them gives xli, yli, xri, and
    yri. The input file is terminated with the integer ‘0’ on a line by itself.

    Output

    Your task is to find such a placing of rooks that the above conditions are satisfied and then output n
    lines each giving the position of a rook in order in which their rectangles appeared in the input. If there
    are multiple solutions, any one will do. Output ‘IMPOSSIBLE’ if there is no such placing of the rooks.

    Sample Input

    8
    1122
    5788
    2255
    2255
    6386
    6385
    6388
    3678
    8
    1122
    5788
    2255
    2255
    6386
    6385
    6388
    3678
    0

    Sample Output

    11
    58
    24
    42
    73
    85
    66
    37
    11
    58
    24
    42
    73
    85
    66
    37


白书
在n*n的棋盘上面放n个车,能否使他们互相不攻击(即不能在同一行一列),并且第i个车必须落在第i的矩形范围(xl,yl, xr,yr)之内
行列可以分开求解,变成了区间问题
一开始想按r小大排序,r相同按l排序,然后依次选择行了
然而,应该是“对于每个位置,选择合法且r最小的”,这样排序并不能保证
只好n^2暴力找了
 
//
// main.cpp
// uva11134
//
// Created by Candy on 10/17/16.
// Copyright © 2016 Candy. All rights reserved.
// #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=5e3+,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n;
int x[N],y[N];
struct data{
int id;
int l1,r1,l2,r2;
}a[N];
//bool cmp1(data &x,data &y){
// if(x.l1==y.l1) return x.r1<y.r1;
// else return x.l1<y.l1;
//}
//bool cmp2(data &x,data &y){
// if(x.l2==y.l2) return x.r2<y.r2;
// return x.l2<y.l2;
//}
//bool solve(){
// sort(a+1,a+1+n,cmp1);
// int p=1;
// for(int i=1;i<=n;i++){
// //printf("hi%d %d %d %d\n",i,a[i].l1,a[i].r1,a[i].id);
// if(a[p].l1<=i&&i<=a[p].r1) x[a[p++].id]=i;
// else if(a[p].r1<i||a[p].l1>i) return 0;
// }
//
// sort(a+1,a+1+n,cmp2);
// p=1;
// for(int i=1;i<=n;i++){
// //printf("ih%d %d %d %d\n",i,a[i].l2,a[i].r2,a[i].id);
// if(a[p].l2<=i&&i<=a[p].r2) y[a[p++].id]=i;
// else if(a[p].r2<i||a[p].l2>i) return 0;
// }
// return 1;
//}
bool sol(){
memset(x,,sizeof(x));
memset(y,,sizeof(y));
for(int i=;i<=n;i++){
int rook=,mnr=INF;
for(int j=;j<=n;j++)
if(!x[j]&&a[j].l1<=i&&a[j].r1<mnr) rook=j,mnr=a[j].r1;
//printf("rook1 %d\n",rook);
if(rook==||a[rook].r1<i) return false;
x[rook]=i;
}
for(int i=;i<=n;i++){
int rook=,mnr=INF;
for(int j=;j<=n;j++)
if(!y[j]&&a[j].l2<=i&&a[j].r2<mnr) rook=j,mnr=a[j].r2;
//printf("rook2 %d\n",rook);
if(rook==||a[rook].r2<i) return false;
y[rook]=i;
}
return ;
}
int main(int argc, const char * argv[]) {
while((n=read())){
for(int i=;i<=n;i++){
a[i].id=i;
a[i].l1=read();a[i].l2=read();a[i].r1=read();a[i].r2=read();
}
if(sol()){
for(int i=;i<=n;i++) printf("%d %d\n",x[i],y[i]);
}else printf("IMPOSSIBLE\n");
} return ;
}

UVA - 11134 Fabled Rooks[贪心 问题分解]的更多相关文章

  1. UVA 11134 Fabled Rooks 贪心

    题目链接:UVA - 11134 题意描述:在一个n*n(1<=n<=5000)的棋盘上放置n个车,每个车都只能在给定的一个矩形里放置,使其n个车两两不在同一行和同一列,判断并给出解决方案 ...

  2. UVA 11134 - Fabled Rooks(贪心+优先队列)

    We would like to place  n  rooks, 1 ≤  n  ≤ 5000, on a  n×n  board subject to the following restrict ...

  3. UVa 11134 - Fabled Rooks——[问题分解、贪心法]

    We would like to place n rooks, ≤ n ≤ , on a n × n board subject to the following restrictions • The ...

  4. uva 11134 - Fabled Rooks(问题转换+优先队列)

    题目链接:uva 11134 - Fabled Rooks 题目大意:给出n,表示要在n*n的矩阵上放置n个车,并且保证第i辆车在第i个区间上,每个区间给出左上角和右小角的坐标.另要求任意两个车之间不 ...

  5. UVa 11134 Fabled Rooks (贪心+问题分解)

    题意:在一个n*n的棋盘上放n个车,让它们不互相攻击,并且第i辆车在给定的小矩形内. 析:说实话,一看这个题真是没思路,后来看了分析,原来这个列和行是没有任何关系的,我们可以分开看, 把它变成两个一维 ...

  6. UVA - 11134 Fabled Rooks问题分解,贪心

    题目:点击打开题目链接 思路:为了满足所有的车不能相互攻击,就要保证所有的车不同行不同列,于是可以发现,行与列是无关的,因此题目可以拆解为两个一维问题,即在区间[1-n]之间选择n个不同的整数,使得第 ...

  7. uva 11134 fabled rooks (贪心)——yhx

    We would like to place n rooks, 1 n 5000, on a n nboard subject to the following restrictions• The i ...

  8. UVa 11134 - Fabled Rooks 优先队列,贪心 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  9. UVA 11134 Fabled Rooks(贪心的妙用+memset误用警示)

    题目链接: https://cn.vjudge.net/problem/UVA-11134 /* 问题 输入棋盘的规模和车的数量n(1=<n<=5000),接着输入n辆车的所能在的矩阵的范 ...

随机推荐

  1. sql语句优化SQL Server

    MS   SQL   Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)          2.I/O吞吐量小,形成了 ...

  2. C#基础-压缩文件及故障排除

    C#压缩文件可以使用第三方dll库:ICSharpCode.SharpZipLib.dll: 以下代码能实现文件夹与多个文件的同时压缩.(例:把三个文件夹和五个文件一起压缩成一个zip) 直接上代码, ...

  3. 如何使 WebAPI 自动生成漂亮又实用在线API文档

    1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...

  4. JMeter专题系列(七)聚合报告之 90% Line

    JMeter 官网原文: 90% Line - 90% of the samples took no more than this time. The remaining samples at lea ...

  5. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  6. var a=function()跟function a()的区别

    //代码一: a(); //执行这个会报错 var a = function(index){ alert(index); } a(); //执行这个不会报错 //代码二: a(); //执行这个不会报 ...

  7. RequireJS 模块的定义与加载

    模块不同于传统的脚本文件,它良好地定义了一个作用域来避免全局名称空间污染.它可以显式地列出其依赖关系,并以函数(定义此模块的那个函数)参数的形式将这些依赖进行注入,而无需引用全局变量.RequireJ ...

  8. Html + Css思维导图

    最近整理的一份Html和Css的思维导图,共享给初学者使用. 各个知识点的详细案例介绍,后期会分阶段依次发布,希望对大家学习html和css有帮助. 如果对文中的知识点有异议,欢迎随时拍砖! 后期也回 ...

  9. AngularJS中的指令全面解析(转载)

    说到AngularJS,我们首先想到的大概也就是双向数据绑定和指令系统了,这两者也是AngularJS中最为吸引人的地方.双向数据绑定呢,感觉没什么好说的,那么今天我们就来简单的讨论下AngularJ ...

  10. Touch ID使用

    前言:如果图片看不了请移步:简书 Touch ID简介 Touch ID指纹识别作为iPhone 5s上的"杀手级"功能早已为人们所熟知,目前搭载的设备有iphone SE.iPh ...