Uva 11134 问题分解,贪心策略区间选点问题
2016-10-06 17:56
399 查看
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
//贪心策略:区间选点问题,vis保存在区间内已经选择的点,如果区间内不能选任何一个点,返回错误
//将第i个点的横坐标保存在a【】,纵坐标保存在b【】
const int maxn=5000+5;
int a[maxn],b[maxn],t;
struct node{
int l,r,p;
node():l(0),r(0),p(0){};
bool operator <(const node&rhs)const {
return r<rhs.r||(r==rhs.r&&l<rhs.l);
}
}x[maxn],y[maxn];
//状态节点,区间节点
int solve(int*a1,node*x1){
int vis[maxn];
memset(vis,0,sizeof(vis));
for(int i=0;i<t;i++){//遍历每个点找到相应的坐标位置
for(int j=x1[i].l;j<=x1[i].r;j++){
if(!vis[j]){//在区间x[i] 找最靠前的点如果该点没有被其他区域选中,则选中,区间选点问题,设置vis保存区间已经被占用的点
a1[x1[i].p]=j;
vis[j]=1;
break;
}
if(j==x1[i].r)//如果区间内的最后一个点被占领,就无法选点
return 0;
}
}
return 1;
}
int main(){
while(cin>>t&&t){
for(int i=0;i<t;i++){
cin>>x[i].l>>y[i].l>>x[i].r>>y[i].r;
x[i].p=i;
y[i].p=i;
}
sort(x,x+t);
sort(y,y+t);
if(solve(a,x)&&solve(b,y)){
for(int i=0;i<t;i++){
cout<<a[i]<<" "<<b[i]<<endl;
}
}
else cout<<"IMPOSSIBLE"<<endl;
}
return 0;
}
//看似相关的x,y实际上不相关
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
//贪心策略:区间选点问题,vis保存在区间内已经选择的点,如果区间内不能选任何一个点,返回错误
//将第i个点的横坐标保存在a【】,纵坐标保存在b【】
const int maxn=5000+5;
int a[maxn],b[maxn],t;
struct node{
int l,r,p;
node():l(0),r(0),p(0){};
bool operator <(const node&rhs)const {
return r<rhs.r||(r==rhs.r&&l<rhs.l);
}
}x[maxn],y[maxn];
//状态节点,区间节点
int solve(int*a1,node*x1){
int vis[maxn];
memset(vis,0,sizeof(vis));
for(int i=0;i<t;i++){//遍历每个点找到相应的坐标位置
for(int j=x1[i].l;j<=x1[i].r;j++){
if(!vis[j]){//在区间x[i] 找最靠前的点如果该点没有被其他区域选中,则选中,区间选点问题,设置vis保存区间已经被占用的点
a1[x1[i].p]=j;
vis[j]=1;
break;
}
if(j==x1[i].r)//如果区间内的最后一个点被占领,就无法选点
return 0;
}
}
return 1;
}
int main(){
while(cin>>t&&t){
for(int i=0;i<t;i++){
cin>>x[i].l>>y[i].l>>x[i].r>>y[i].r;
x[i].p=i;
y[i].p=i;
}
sort(x,x+t);
sort(y,y+t);
if(solve(a,x)&&solve(b,y)){
for(int i=0;i<t;i++){
cout<<a[i]<<" "<<b[i]<<endl;
}
}
else cout<<"IMPOSSIBLE"<<endl;
}
return 0;
}
//看似相关的x,y实际上不相关
相关文章推荐
- UVA-11134 Fabled Rooks 贪心问题(区间贪心)
- UVA - 11134 Fabled Rooks问题分解,贪心
- UVA - 11134 Fabled Rooks[贪心 问题分解]
- uva11134 fabled rooks 贪心+问题独立分解
- uva11134 线性区间覆盖问题(贪心模型+优先队列实现)
- UVa 1615 Highway (贪心,区间选点问题)
- 8.5-237-uva11134-Fabled Rooks-问题分解-贪心
- UVA 11134 Fabled Rooks(贪心法,区间与选点问题)
- UVa 11134 Fabled Rooks (贪心+问题分解)
- UVA 10148 Advertisement (贪心 + 区间选点问题)
- Uva 11134 Fabled Rooks (问题分解 + 贪心放置)
- UVA 10148 Advertisement (贪心 + 区间选点问题)
- uvalive 2519 - Radar Installation(区间选点问题)
- POJ1328-贪心-区间选点问题
- UVA 10691 - Subway(贪心+区间选点)
- UVA 10382 Watering Grass (贪心 + 区间覆盖问题)
- UVALIVE 2519 Radar Installation 区间选点问题
- 区间选点问题【贪心】
- UVALive 2519 Radar Installation 雷达扫描 区间选点问题
- 区间选点问题(贪心)