【例题 8-4 UVA - 11134】Fabled Rooks
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
显然把问题分解成两个子问题。
x轴和y轴分别做。
即n个点要求第i个点在[li,ri]范围内。(ri按左端点、右端点排。尽量取左边的方法是错的。
hack数据:(1,1),(1,3),(2,2)
在安排idx=2的时候,优先用了(1,3)这个区间。导致原本3可以放的。现在放不了了。
所以我们的方法就是。
对于第i个点。
找一个能包含它。
但是右端点又尽量小的区间。
这样,能保证这个选取的区间尽量不影响到后面的点的选取。
(而前面的点无所谓,因为已经安排完了
O(N^2)的复杂度找这样的区间就可以了。
如果数据大的话。
可以考虑用set来处理:比如区间[li,ri]
则可以在li的位置插入一个数据ri
当ri<idx的时候,则在set中把ri去掉。
否则每次都找set中最小的ri.把它删掉。
【代码】
/*
1.Shoud it use long long ?
2.Have you ever test several sample(at least therr) yourself?
3.Can you promise that the solution is right? At least,the main ideal
4.use the puts("") or putchar() or printf and such things?
5.init the used array or any value?
6.use error MAX_VALUE?
7.use scanf instead of cin/cout?
8.whatch out the detail input require
*/
/*
一定在这里写完思路再敲代码!!!
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 5000;
vector < pair<int,pair<int,int> > > v1,v2;
int n;
int x[N+10],y[N+10];
bool ok(vector<pair<int,pair<int,int> > > v,int ju){
for (int i = 1;i <= n;i++){
int mi = 100000;
__typeof v.begin() idx;
for (auto j = v.begin();j!=v.end();j++){
auto temp = *j;
if (temp.first<=i && i<=temp.second.first){
if (temp.second.first<mi){
mi = temp.second.first;
idx = j;
}
}
}
if (mi==100000) return false;
if (ju==0){
x[(*idx).second.second] = i;
}else{
y[(*idx).second.second] = i;
}
v.erase(idx);
}
return true;
}
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
while (cin >>n && n){
v1.clear(),v2.clear();
for (int i = 1;i <= n;i++){
int xl,yl,xr,yr;
cin >> xl >> yl >> xr >> yr;
v1.push_back({xl,{xr,i}});
v2.push_back({yl,{yr,i}});
}
if (ok(v1,0)&&ok(v2,1)){
for (int i = 1;i <= n;i++)
cout << x[i] <<' '<<y[i]<<endl;
}else{
cout <<"IMPOSSIBLE"<<endl;
}
}
return 0;
}
【例题 8-4 UVA - 11134】Fabled Rooks的更多相关文章
- UVA - 11134 Fabled Rooks[贪心 问题分解]
UVA - 11134 Fabled Rooks We would like to place n rooks, 1 ≤ n ≤ 5000, on a n × n board subject to t ...
- uva 11134 - Fabled Rooks(问题转换+优先队列)
题目链接:uva 11134 - Fabled Rooks 题目大意:给出n,表示要在n*n的矩阵上放置n个车,并且保证第i辆车在第i个区间上,每个区间给出左上角和右小角的坐标.另要求任意两个车之间不 ...
- UVA 11134 Fabled Rooks 贪心
题目链接:UVA - 11134 题意描述:在一个n*n(1<=n<=5000)的棋盘上放置n个车,每个车都只能在给定的一个矩形里放置,使其n个车两两不在同一行和同一列,判断并给出解决方案 ...
- 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 ...
- 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 优先队列,贪心 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVa 11134 - Fabled Rooks——[问题分解、贪心法]
We would like to place n rooks, ≤ n ≤ , on a n × n board subject to the following restrictions • The ...
- UVA 11134 Fabled Rooks
贪心+优先队列+问题分解 对x,y 分开处理 当 xl<cnt(当前处理行)时,不能简单的选择cnt,而是应该让xl=cnt 并重新加入优先队列.(y的处理同上) #include <io ...
- UVa 11134 Fabled Rooks(贪心)
题目链接 题意 在n*n的棋盘上的n个指定区间上各放1个'车’ , 使他们相互不攻击(不在同行或同列),输出一种可能的方法. 分析 每行每列都必须放车,把行列分开看,若行和列同时有解,则问题有解. ...
- UVA 11134 Fabled Rooks(贪心的妙用+memset误用警示)
题目链接: https://cn.vjudge.net/problem/UVA-11134 /* 问题 输入棋盘的规模和车的数量n(1=<n<=5000),接着输入n辆车的所能在的矩阵的范 ...
随机推荐
- 《机器学习系统设计》之应用scikit-learn做文本分类(上)
前言: 本系列是在作者学习<机器学习系统设计>([美] WilliRichert)过程中的思考与实践,全书通过Python从数据处理.到特征project,再到模型选择,把机器学习解决这个 ...
- 换主页轮播的主题图片(4、删除)---轻开电子商务系统(企业入门级B2C站点)
接( 换主页轮播的主题图片1 ) 文件:site/links/img0.html中的表单(第11行最后一个td) <td><if x="@{sys:canDo}" ...
- POJ 3193 字符串排序+比较
思路: 1. 先把那m个排个序 此后每回二分+strncmp一下就好了 strncmp是个好东西啊-- 2. hash判判 (注意 hash会有冲突--------.) //By SiriusRen ...
- Ubuntu16.04安装java(Oracle jre)
一.安装1.从Oracle官网下载jre-8u161-linux-x64.tar.gz安装文件(下载与浏览器位数一样) 2.切换到所需的安装目录.键入: pipci@ubuntu:~$ cd /usr ...
- 在navicat中如何新建连接数据库
前几天给大家分享了如何安装Navicat,没有来得及上车的小伙伴可以戳这篇文章:手把手教你安装Navicat——靠谱的Navicat安装教程.今天给大家分享一下Navicat的简单使用教程,具体的教程 ...
- tensorflow学习之路----保存和提取数据
#保存数据注意他只能保存变量,不能保存神经网络的框架.#保存数据的作用:保存权重有利于下一次的训练,或者可以用这个数据进行识别#np.arange():arange函数用于创建等差数组,使用频率非常高 ...
- java web应用调用python深度学习训练的模型
之前参见了中国软件杯大赛,在大赛中用到了深度学习的相关算法,也训练了一些简单的模型.项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用p ...
- [Javascript] Compose multiple functions for new behavior in JavaScript
In this lesson you will create a utility function that allows you to quickly compose behavior of mul ...
- 一个project师该怎样高效工作
1. 静. 在千头万绪,百般push.各种IM电话邮件狂轰滥炸中保持一个静字.找到最适合如今做的事情,情绪不要被外界所干扰.一次仅仅做一件事,不要被打断. 有的公司土鳖文化严重,领导一会儿要求你干这 ...
- leetcode 链表 Partition List
Partition List Total Accepted: 19761 Total Submissions: 73252My Submissions Given a linked list and ...