码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 11134 Fabled Rooks

时间:2014-07-28 23:42:54      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   for   问题   div   

贪心+优先队列+问题分解

对x,y 分开处理

当 xl<cnt(当前处理行)时,不能简单的选择cnt,而是应该让xl=cnt 并重新加入优先队列。(y的处理同上)

 

 

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <queue>
 5 using namespace std;
 6 
 7 struct node {
 8     int l,r;
 9     int id;
10     friend bool operator < (const node &dis,const node &res){
11         if (dis.l!=res.l) return dis.l>res.l;
12         else return dis.r>res.r;
13     }
14 }rookx[5005],rooky[5005];
15 
16 int ans[2][5005];
17     int n;
18 
19 int solved (node* x,int p){
20     priority_queue<node> q;
21     while (!q.empty())
22         q.pop();
23     for (int i=1;i<=n;i++)
24         q.push(x[i]); 
25     int cnt=1;
26     while (!q.empty() ){
27         node a;
28         a=q.top();
29         q.pop() ;
30         if (a.r<cnt)
31             return 0;
32         if (a.l<cnt){
33             a.l=cnt;
34             q.push(a);
35             continue ;
36         } 
37         if (a.l>cnt){
38             return 0;
39         }
40         ans[p][a.id]=cnt++;
41     }
42     return 1;
43 }
44 
45 int main (){
46     while (cin>>n&&n){
47         for (int i=1;i<=n;i++){
48             cin>>rookx[i].l>>rooky[i].l>>rookx[i].r>>rooky[i].r;
49             rookx[i].id=rooky[i].id=i;
50         }
51         if (solved (rookx,0)&&solved (rooky,1)){
52             for (int i=1;i<=n;i++)
53                 cout<<ans[0][i]<<" "<<ans[1][i]<<endl;
54         }
55         else cout<<"IMPOSSIBLE"<<endl;
56     }
57     return 0;
58 }

 

UVA 11134 Fabled Rooks,布布扣,bubuko.com

UVA 11134 Fabled Rooks

标签:style   blog   color   os   io   for   问题   div   

原文地址:http://www.cnblogs.com/gfc-g/p/3873325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!