UVA - 11134 Fabled Rooks

来源:互联网 发布:淘宝可以看到消费总额 编辑:程序博客网 时间:2024/04/27 21:27
#include<cstdio>#include<iostream>#include<cstring>#include<string.h>#include<algorithm>using namespace std;const int maxn = 5000 + 5;struct node{    int x1, x2, y1, y2;    int id;}k[maxn];int x[maxn];int y[maxn];bool cmp1(node p, node q){    if(p.x2==q.x2) return p.x1 < q.x1;    return p.x2 < q.x2;}bool cmp2(node p, node q){    if(p.y2==q.y2) return p.y1 < q.y1;    return p.y2 < q.y2;}int main(){    int n;    while(scanf("%d", &n) ==1 && n)    {        memset(k,0,sizeof(k));        memset(x,0,sizeof(x));        memset(y,0,sizeof(y));        for(int i = 0; i < n; ++i)            { scanf("%d%d%d%d", &k[i].x1, &k[i].y1, &k[i].x2, &k[i].y2); k[i].id = i;}        int cnt[maxn];        bool ok = false;        memset(cnt,0,sizeof(cnt));        sort(k,k+n, cmp1);        for(int i = 0; i < n;++i)        {            ok = false;            for(int j = k[i].x1; j <= k[i].x2; ++j)            {                if(!cnt[j])                {                    ok = true;                    x[k[i].id] = j;                    cnt[j] = 1;                    break;                }            }            if(!ok) break;        }        if(!ok)        {            cout << "IMPOSSIBLE" << endl;            continue;        }        memset(cnt,0,sizeof(cnt));        sort(k,k+n, cmp2);        for(int i = 0; i < n;++i)        {            ok = false;            for(int j = k[i].y1; j <= k[i].y2; ++j)            {                if(!cnt[j])                {                    ok = true;                    y[k[i].id] = j;                    cnt[j] = 1;                    break;                }            }            if(!ok) break;        }        if(!ok)        {            cout << "IMPOSSIBLE" << endl;            continue;        }        for(int i = 0; i < n; ++i)            printf("%d %d\n", x[i], y[i]);    }    return 0;}

0 0
原创粉丝点击