#include <iostream> #include <cmath> using namespace std; struct car { int nr,x1,h; }; car poczatkowo[50001]; car koncowo[50001]; int szczeliny[50001]; int gdzie_jest[50001]; bool nbufor[50001]; void sortowanie(int N,car* t) { car tmp; int i,j,k,m,x; for(i = 2; i <= N; i++) { j = i; k = j / 2; tmp=t[i]; x=t[i].x1; while((k > 0) && (t[k].x1 < x)) { t[j] = t[k]; j = k; k = j / 2; } t[j] = tmp; } for(i = N; i > 1; i--) { swap(t[1], t[i]); j = 1; k = 2; while(k < i) { if((k + 1 < i) && (t[k + 1].x1 > t[k].x1)) m = k + 1; else m = k; if(t[m].x1 <= t[j].x1) break; swap(t[j], t[m]); j = m; k = j + j; } } } int main() { ios_base::sync_with_stdio(0); int n,w,y1,y2,t,x1,x2; cin>>t; for(int f=0;f<t;f++) { cin>>n>>w; for(int i=1;i<=n;i++) { poczatkowo[i].nr=i; cin>>x1>>y1>>x2>>y2; poczatkowo[i].x1=min(x1,x2); poczatkowo[i].h=abs(y2-y1); } for(int i=1;i<=n;i++) { koncowo[i].nr=i; cin>>x1>>y1>>x2>>y2; koncowo[i].x1=min(x1,x2); koncowo[i].h=abs(y2-y1); } for(int i=1;i<=n;i++) szczeliny[i]=w-poczatkowo[i].h; sortowanie(n,poczatkowo); sortowanie(n,koncowo); for(int i=1;i<=n;i++) { gdzie_jest[poczatkowo[i].nr]=i; } bool spr=1; for(int i=1;i<=n && spr;i++) { for(int j=1;j<=n;j++) nbufor[j]=0; for(int j=i+1;j<=n;j++) { nbufor[koncowo[j].nr]=1; } for(int j=gdzie_jest[koncowo[i].nr]+1;j<=n;j++) { nbufor[poczatkowo[j].nr]=0; } for(int j=1;j<=n;j++) { if(nbufor[j]) { if(szczeliny[j] < koncowo[i].h ) { spr=0; break; } } } } if(spr) cout<<"TAK"<<endl; else cout<<"NIE"<<endl; } 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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include <iostream> #include <cmath> using namespace std; struct car { int nr,x1,h; }; car poczatkowo[50001]; car koncowo[50001]; int szczeliny[50001]; int gdzie_jest[50001]; bool nbufor[50001]; void sortowanie(int N,car* t) { car tmp; int i,j,k,m,x; for(i = 2; i <= N; i++) { j = i; k = j / 2; tmp=t[i]; x=t[i].x1; while((k > 0) && (t[k].x1 < x)) { t[j] = t[k]; j = k; k = j / 2; } t[j] = tmp; } for(i = N; i > 1; i--) { swap(t[1], t[i]); j = 1; k = 2; while(k < i) { if((k + 1 < i) && (t[k + 1].x1 > t[k].x1)) m = k + 1; else m = k; if(t[m].x1 <= t[j].x1) break; swap(t[j], t[m]); j = m; k = j + j; } } } int main() { ios_base::sync_with_stdio(0); int n,w,y1,y2,t,x1,x2; cin>>t; for(int f=0;f<t;f++) { cin>>n>>w; for(int i=1;i<=n;i++) { poczatkowo[i].nr=i; cin>>x1>>y1>>x2>>y2; poczatkowo[i].x1=min(x1,x2); poczatkowo[i].h=abs(y2-y1); } for(int i=1;i<=n;i++) { koncowo[i].nr=i; cin>>x1>>y1>>x2>>y2; koncowo[i].x1=min(x1,x2); koncowo[i].h=abs(y2-y1); } for(int i=1;i<=n;i++) szczeliny[i]=w-poczatkowo[i].h; sortowanie(n,poczatkowo); sortowanie(n,koncowo); for(int i=1;i<=n;i++) { gdzie_jest[poczatkowo[i].nr]=i; } bool spr=1; for(int i=1;i<=n && spr;i++) { for(int j=1;j<=n;j++) nbufor[j]=0; for(int j=i+1;j<=n;j++) { nbufor[koncowo[j].nr]=1; } for(int j=gdzie_jest[koncowo[i].nr]+1;j<=n;j++) { nbufor[poczatkowo[j].nr]=0; } for(int j=1;j<=n;j++) { if(nbufor[j]) { if(szczeliny[j] < koncowo[i].h ) { spr=0; break; } } } } if(spr) cout<<"TAK"<<endl; else cout<<"NIE"<<endl; } return 0; } |