#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <set>
#define MAXN 100007
#define INF
#define PB push_back
#define MP make_pair
#define ST first
#define ND second
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(a,b,c) for(int a=b;a<=(c);a++)
#define FORD(a,b,c) for (int a=b;a>=(c);a--)
#define VAR(v,n) __typeof(n) v=(n)
#define ALL(c) c.begin(),c.end()
#define FOREACH(i,c) for(VAR(i,(c).begin());i!=(c).end();i++)
using namespace std;
typedef long long LL;
int n;
int ile[2];
LL zycie,koszt,zysk;
pair<LL,pair<LL,int> > t[2][MAXN];
bool mozna;
int main(){
mozna = true;
scanf("%d%lld",&n,&zycie);
REP(i,n) {
scanf("%lld%lld",&koszt,&zysk);
if (koszt <= zysk) t[0][ile[0]++] = MP(koszt,MP(zysk,i));
else t[1][ile[1]++] = MP(zysk,MP(koszt,i));
}
sort(t[0],t[0]+ile[0]);
REP(i,ile[0]) {
if (t[0][i].ST >= zycie) mozna = false;
zycie += t[0][i].ND.ST - t[0][i].ST;
}
sort(t[1],t[1]+ile[1]);
FORD(i,ile[1]-1,0) {
if (t[1][i].ND.ST >= zycie) mozna = false;
zycie += t[1][i].ST - t[1][i].ND.ST;
}
if (mozna) {
puts("TAK");
REP(i,ile[0]) printf("%d ",t[0][i].ND.ND+1);
FORD(i,ile[1]-1,0) printf("%d ",t[1][i].ND.ND+1);
puts("");
}
else puts("NIE");
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 | #include <cstdio> #include <vector> #include <queue> #include <stack> #include <cstring> #include <iostream> #include <algorithm> #include <set> #define MAXN 100007 #define INF #define PB push_back #define MP make_pair #define ST first #define ND second #define REP(i,n) for(int i=0;i<(n);i++) #define FOR(a,b,c) for(int a=b;a<=(c);a++) #define FORD(a,b,c) for (int a=b;a>=(c);a--) #define VAR(v,n) __typeof(n) v=(n) #define ALL(c) c.begin(),c.end() #define FOREACH(i,c) for(VAR(i,(c).begin());i!=(c).end();i++) using namespace std; typedef long long LL; int n; int ile[2]; LL zycie,koszt,zysk; pair<LL,pair<LL,int> > t[2][MAXN]; bool mozna; int main(){ mozna = true; scanf("%d%lld",&n,&zycie); REP(i,n) { scanf("%lld%lld",&koszt,&zysk); if (koszt <= zysk) t[0][ile[0]++] = MP(koszt,MP(zysk,i)); else t[1][ile[1]++] = MP(zysk,MP(koszt,i)); } sort(t[0],t[0]+ile[0]); REP(i,ile[0]) { if (t[0][i].ST >= zycie) mozna = false; zycie += t[0][i].ND.ST - t[0][i].ST; } sort(t[1],t[1]+ile[1]); FORD(i,ile[1]-1,0) { if (t[1][i].ND.ST >= zycie) mozna = false; zycie += t[1][i].ST - t[1][i].ND.ST; } if (mozna) { puts("TAK"); REP(i,ile[0]) printf("%d ",t[0][i].ND.ND+1); FORD(i,ile[1]-1,0) printf("%d ",t[1][i].ND.ND+1); puts(""); } else puts("NIE"); return 0; } |
English