#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(""); } } |
English