zoukankan      html  css  js  c++  java
  • Uva11134

    #include<bits/stdc++.h>
    
    #define inf 0x3f3f3f3f
    
    const int maxn=5000;
    
    using namespace std;
    
    int n;
    
    struct rook{
            int x1,y1;
            int x2,y2;
            int id;
            int resx,resy;
            int size(){
                    return abs(x1 - x2) * abs(x1 - x2) + abs(y1 - y2) * abs(y1 - y2);
            }
            int width(){
                    return abs(x1 - x2);
            }
            int len(){
                    return abs(y1 - y2);
            }
    }rooks[maxn+10];
    
    int flagx[maxn+10];
    
    int flagy[maxn+10];
    
    bool cmpx(rook a, rook b){
            /*if(a.width() == b.width()){
                  return a.x1 < b.x1;      
            }
            return a.width() < b.width();*/
            //刚开始想错了,这么去贪心,是错的。
                                           /* 反例
                                            * 1111
                                            * 1
                                            *  1
                                            *   1
                                            *    11
                                            */
            if(a.x2 == b.x2){
                    return a.x1 < b.x1;
            }
            return a.x2 < b.x2;
    }
    bool cmpy(rook a, rook b){
            /*if(a.len() == b.len()){
                  return a.y1 < b.y1;
            }
            return a.len() < b.len();*/
            if(a.y2 == b.y2){
                    return a.y1 < b.y1;
            }
            return a.y2 < b.y2;
    }
    bool cmp1(rook a, rook b){
            return a.id < b.id;
    }
    
    int main()
    {
            while(scanf("%d",&n)!=EOF&&n){
                    int res = 0;
                    memset(flagx, 0, sizeof(flagx));
                    memset(flagy, 0, sizeof(flagy));
                    for(int i = 0; i < n; ++i){
                            scanf("%d%d%d%d",&rooks[i].x1,&rooks[i].y1,&rooks[i].x2,&rooks[i].y2);
                            rooks[i].id = i;
                    }
                    sort(rooks, rooks + n, cmpx);
                    for(int i = 0; i < n; ++i){
                            int flag = 0;
                            for(int j = rooks[i].x1; j <= rooks[i].x2; ++j){
                                    if(!flagx[j]){
                                            flagx[j] = 1;
                                            rooks[i].resx = j;
                                            flag = 1;
                                            break;
                                    }
                            }
                            if(!flag){
                                    res = 1;
                                    break;
                            }
                    }
                    if(!res){
                            sort(rooks, rooks + n, cmpy);
                            for(int i = 0; i < n; ++i){
                                    int flag = 0;
                                    for(int j = rooks[i].y1; j <= rooks[i].y2; ++j){
                                            if(!flagy[j]){
                                                    flagy[j] = 1;
                                                    rooks[i].resy = j;
                                                    flag = 1;
                                                    break;
                                            }
                                    }
                                    if(!flag){
                                            res = 1;
                                            break;
                                    }
                            }
                    }
                    if(res){
                            printf("IMPOSSIBLE
    ");
                    } else {
                            sort(rooks, rooks + n, cmp1);
                            for(int i = 0; i < n; ++i){
                                    printf("%d %d
    ",rooks[i].resx,rooks[i].resy);
                            }
                    }
            }
        return 0;
    }
  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/6695368.html
Copyright © 2011-2022 走看看