zoukankan      html  css  js  c++  java
  • Fabled Rooks UVA

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn=5000+50;
     5 int ansx[maxn];
     6 int ansy[maxn];
     7 int visx[maxn];
     8 int visy[maxn];
     9 struct nodex
    10 {
    11     int l,r,num;
    12     bool operator < (const nodex& rhs)
    13     {
    14         if(r!=rhs.r)
    15         {
    16             return r<rhs.r;
    17         }
    18         else return l<rhs.l;
    19     }
    20 }x[maxn];
    21 struct nodey
    22 {
    23     int l,r,num;
    24     bool operator < (const nodey& rhs)
    25     {
    26         if(r!=rhs.r)
    27         {
    28             return r<rhs.r;
    29         }
    30         else return l<rhs.l;
    31     }
    32 }y[maxn];
    33 int main()
    34 {
    35     int n;
    36     while(scanf("%d",&n)&&n)
    37     {
    38         int ansx[maxn]={0};
    39         int ansy[maxn]={0};
    40         int visx[maxn]={0};
    41         int visy[maxn]={0};
    42         for(int i=1;i<=n;i++)
    43         {
    44             int xl,yl,xr,yr;
    45             scanf("%d%d%d%d",&xl,&yl,&xr,&yr);
    46             x[i].num=i;
    47             x[i].l=xl;
    48             x[i].r=xr;
    49             y[i].num=i;
    50             y[i].l=yl;
    51             y[i].r=yr;
    52         }
    53         sort(x+1,x+n+1);
    54         sort(y+1,y+n+1);
    55         int flag=1;
    56         for(int i=1;i<=n;i++)
    57         {
    58             while(visx[x[i].l]&&x[i].l<=x[i].r)
    59             {
    60                 x[i].l++;
    61             }
    62             if(x[i].l>x[i].r)
    63             {
    64                 flag=0;
    65                 break;
    66             }
    67             visx[x[i].l]=1;
    68             ansx[x[i].num]=x[i].l;
    69         }
    70         for(int i=1;i<=n;i++)
    71         {
    72             while(visy[y[i].l]&&y[i].l<=y[i].r)
    73             {
    74                 y[i].l++;
    75             }
    76             if(y[i].l>y[i].r)
    77             {
    78                 flag=0;
    79                 break;
    80             }
    81             visy[y[i].l]=1;
    82             ansy[y[i].num]=y[i].l;
    83         }
    84         if(!flag) printf("IMPOSSIBLE
    ");
    85         else 
    86         {
    87             for(int i=1;i<=n;i++)
    88             {
    89                 printf("%d %d
    ",ansx[i],ansy[i]);
    90             }
    91         }
    92     }
    93     return 0;
    94  
    95 }

    简单的贪心,回归到最基本的模型,每个点取可取端点的最左边即可。

  • 相关阅读:
    hdu2151
    hdu1028
    hdu1398
    hdu1465
    hdu2853
    poj2195
    poj2255
    JS正则校验数字,特殊字符,邮箱基本格式
    JS正则校验数字,特殊字符,邮箱基本格式
    io读取文件内容乱码处理
  • 原文地址:https://www.cnblogs.com/hhlys/p/12727727.html
Copyright © 2011-2022 走看看