zoukankan      html  css  js  c++  java
  • uva 11143

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<algorithm>
      4 #define maxn 5100
      5 #include<queue>
      6 using namespace std;
      7 
      8 struct node
      9 {
     10     int x,y;
     11     int id;
     12     bool operator<(const node &t)const
     13     {
     14         return y>t.y;
     15     }
     16 } hang[maxn],lie[maxn];
     17 
     18 bool cmp(const node &a,const node &b)
     19 {
     20     return a.x<b.x;
     21 }
     22 
     23 int h[maxn],l[maxn];
     24 
     25 priority_queue<node>q;
     26 
     27 int main()
     28 {
     29     int n;
     30     while(scanf("%d",&n)&&n)
     31     {
     32         for(int i=0; i<n; i++)
     33         {
     34             scanf("%d%d%d%d",&hang[i].x,&lie[i].x,&hang[i].y,&lie[i].y);
     35             hang[i].id=lie[i].id=i;
     36             h[i]=0;
     37             l[i]=0;
     38         }
     39         sort(hang,hang+n,cmp);
     40         int cur=0;
     41         int timer=1;
     42         bool flag=1;
     43         while(!q.empty())q.pop();
     44         while(1)
     45         {
     46             while(cur<n&&hang[cur].x<=timer)q.push(hang[cur++]);
     47             if(timer<=n&&q.empty())
     48                 {
     49                     flag=0;
     50                     break;
     51                 }
     52             node v=q.top();
     53             q.pop();
     54             if(timer<v.x||timer>v.y)
     55             {
     56                 flag=0;
     57                 break;
     58             }
     59             h[v.id]=timer;
     60             timer++;
     61             if(timer>n)break;
     62         }
     63         if(flag)
     64         {
     65             sort(lie,lie+n,cmp);
     66             cur=0;
     67             timer=1;
     68             while(!q.empty())q.pop();
     69             while(1)
     70             {
     71                 while(cur<n&&lie[cur].x<=timer)q.push(lie[cur++]);
     72                 if(timer<=n&&q.empty())
     73                 {
     74                     flag=0;
     75                     break;
     76                 }
     77                 node v=q.top();
     78                 q.pop();
     79                 if(timer<v.x||timer>v.y)
     80                 {
     81                     flag=0;
     82                     break;
     83                 }
     84                 l[v.id]=timer;
     85                 timer++;
     86                 if(timer>n)break;
     87             }
     88         }
     89         for(int i=0;i<n;i++)
     90             if(l[i]==0||h[i]==0)
     91             {
     92                 flag=0;
     93                 break;
     94             }
     95         if(flag)
     96         {
     97             for(int i=0; i<n; i++)
     98                 printf("%d %d
    ",h[i],l[i]);
     99         }
    100         else puts("IMPOSSIBLE");
    101     }
    102     return 0;
    103 }
    View Code
  • 相关阅读:
    数组和类集排序总结
    toString()方法
    冒泡排序java
    Scanner类输入字符串和整形数字
    身份证分组
    jsonp的实质
    在伪数组上部署iterator方法
    获取属性的方法
    合并以及对于引用克隆
    深度复制对象已解决循环引用
  • 原文地址:https://www.cnblogs.com/yours1103/p/3804966.html
Copyright © 2011-2022 走看看