#include <stdio.h> typedef struct Sam { int x1,y1,x2,y2; int h; int i; struct Sam *d; int di; int ok; } Sam; Sam org[50000],doc[50000]; int cmpSx (const void *a,const void *b) { int p=((*(Sam*)a).x1-(*(Sam*)b).x1); if(p)return p; return ((*(Sam*)a).h-(*(Sam*)b).h); } int main(void) { int t,i=0,j; int n,w; int x1,y1,x2,y2,pp; int ans; scanf("%d",&t); for(;i<t;++i) { ans=1; scanf("%d %d",&n,&w); for(j=0;j<n;++j) { scanf("%d %d %d %d",&x1,&y1,&x2,&y2); if(x1>x2) { pp=x1;x1=x2;x2=pp; pp=y1;y1=y2;y2=pp; } if(y1>y2) { pp=y1;y1=y2;y2=pp; } org[j].x1=x1;org[j].x2=x2;org[j].y1=y1;org[j].y2=y2; org[j].h=y2-y1; org[j].i=j; org[j].ok=1; } for(j=0;j<n;++j) { scanf("%d %d %d %d",&x1,&y1,&x2,&y2); if(x1>x2) { pp=x1;x1=x2;x2=pp; pp=y1;y1=y2;y2=pp; } if(y1>y2) { pp=y1;y1=y2;y2=pp; } doc[j].x1=x1;doc[j].x2=x2;doc[j].y1=y1;doc[j].y2=y2; doc[j].h=y2-y1; doc[j].i=j; } qsort(org, n, sizeof(Sam), cmpSx); for(j=0;j<n;++j){ doc[org[j].i].d=org+j; doc[org[j].i].di=j; } qsort(doc, n, sizeof(Sam), cmpSx); for(j=0;j<n;++j){ (*(doc[j].d)).d=org+j; (*(doc[j].d)).di=j; } int k,po,oh; for(j=0;j<n && ans;++j){ po=doc[j].di; oh=org[po].h; for(k=po-1;k>=0;--k){ if(org[k].ok && oh+org[k].h>w){ ans=0; break; } } org[po].ok=0; } printf(ans?"TAK\n":"NIE\n"); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include <stdio.h> typedef struct Sam { int x1,y1,x2,y2; int h; int i; struct Sam *d; int di; int ok; } Sam; Sam org[50000],doc[50000]; int cmpSx (const void *a,const void *b) { int p=((*(Sam*)a).x1-(*(Sam*)b).x1); if(p)return p; return ((*(Sam*)a).h-(*(Sam*)b).h); } int main(void) { int t,i=0,j; int n,w; int x1,y1,x2,y2,pp; int ans; scanf("%d",&t); for(;i<t;++i) { ans=1; scanf("%d %d",&n,&w); for(j=0;j<n;++j) { scanf("%d %d %d %d",&x1,&y1,&x2,&y2); if(x1>x2) { pp=x1;x1=x2;x2=pp; pp=y1;y1=y2;y2=pp; } if(y1>y2) { pp=y1;y1=y2;y2=pp; } org[j].x1=x1;org[j].x2=x2;org[j].y1=y1;org[j].y2=y2; org[j].h=y2-y1; org[j].i=j; org[j].ok=1; } for(j=0;j<n;++j) { scanf("%d %d %d %d",&x1,&y1,&x2,&y2); if(x1>x2) { pp=x1;x1=x2;x2=pp; pp=y1;y1=y2;y2=pp; } if(y1>y2) { pp=y1;y1=y2;y2=pp; } doc[j].x1=x1;doc[j].x2=x2;doc[j].y1=y1;doc[j].y2=y2; doc[j].h=y2-y1; doc[j].i=j; } qsort(org, n, sizeof(Sam), cmpSx); for(j=0;j<n;++j){ doc[org[j].i].d=org+j; doc[org[j].i].di=j; } qsort(doc, n, sizeof(Sam), cmpSx); for(j=0;j<n;++j){ (*(doc[j].d)).d=org+j; (*(doc[j].d)).di=j; } int k,po,oh; for(j=0;j<n && ans;++j){ po=doc[j].di; oh=org[po].h; for(k=po-1;k>=0;--k){ if(org[k].ok && oh+org[k].h>w){ ans=0; break; } } org[po].ok=0; } printf(ans?"TAK\n":"NIE\n"); } return 0; } |