#include<cstdio> #include<algorithm> #include<vector> #include<set> #include<queue> #include<stack> #include<cmath> #include<map> using namespace std; typedef pair<int,int> PI; typedef long long LL; typedef double D; #define FI first #define SE second #define MP make_pair #define PB push_back #define R(I,N) for(int I=0;I<N;I++) #define F(I,A,B) for(int I=A;I<B;I++) #define FD(I,N) for(int I=N-1;I>=0;I--) #define make(A) scanf("%d",&A) #define MAX 100001 int n,z; struct pot{ int a,b,nr; }; bool q(pot a,pot b){ return a.a < b.a; } vector<pot> t[2]; bool zle(vector<pot> &t,LL ak){ sort(t.begin(),t.end(),q); R(i,t.size()){ if(t[i].a >= ak)return 1; ak -= t[i].a; ak += t[i].b; } return 0; } main(){ make(n);make(z); LL sum = z; R(i,n){ int a,b; make(a); make(b); sum -= a; sum += b; pot pom = {a:a,b:b,nr:i+1}; if(b>a) t[0].PB(pom); else{ swap(pom.a,pom.b); t[1].PB(pom); } } if(zle(t[0],z) || zle(t[1],sum)) puts("NIE"); else{ puts("TAK"); R(i,t[0].size()) printf("%d ",t[0][i].nr); FD(i,int(t[1].size())) printf("%d ",t[1][i].nr); puts(""); } }
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 | #include<cstdio> #include<algorithm> #include<vector> #include<set> #include<queue> #include<stack> #include<cmath> #include<map> using namespace std; typedef pair<int,int> PI; typedef long long LL; typedef double D; #define FI first #define SE second #define MP make_pair #define PB push_back #define R(I,N) for(int I=0;I<N;I++) #define F(I,A,B) for(int I=A;I<B;I++) #define FD(I,N) for(int I=N-1;I>=0;I--) #define make(A) scanf("%d",&A) #define MAX 100001 int n,z; struct pot{ int a,b,nr; }; bool q(pot a,pot b){ return a.a < b.a; } vector<pot> t[2]; bool zle(vector<pot> &t,LL ak){ sort(t.begin(),t.end(),q); R(i,t.size()){ if(t[i].a >= ak)return 1; ak -= t[i].a; ak += t[i].b; } return 0; } main(){ make(n);make(z); LL sum = z; R(i,n){ int a,b; make(a); make(b); sum -= a; sum += b; pot pom = {a:a,b:b,nr:i+1}; if(b>a) t[0].PB(pom); else{ swap(pom.a,pom.b); t[1].PB(pom); } } if(zle(t[0],z) || zle(t[1],sum)) puts("NIE"); else{ puts("TAK"); R(i,t[0].size()) printf("%d ",t[0][i].nr); FD(i,int(t[1].size())) printf("%d ",t[1][i].nr); puts(""); } } |