#include <iostream> using namespace std; int minindex(int *t,int *l,int m) { int min = 0; for(int i=1;i<m;i++) { if(t[i]<0) continue; if(t[min]<0) min=i; else if (t[i]<t[min]) min=i; else if(t[i]==t[min] && l[i]>l[min]) min=i; } return min; } int maxindex(int *t,int *l,int m) { int min = 0; for(int i=1;i<m;i++) { if(t[i]<0) continue; if(t[min]<0) min=i; else if (t[i]>t[min]) min=i; else if(t[i]==t[min] && l[i]<l[min]) min=i; } return min; } int main() { int m; int hp; scanf("%d %d",&m,&hp); int hp1 = hp; int* tab= new int[m]; int* hptab = new int[m]; int* mtab = new int[m]; for(int i=0;i<m;i++) { scanf("%d %d",&tab[i],&hptab[i]); mtab[i] = tab[i]; } int* sol = new int[m]; for(int i=0;i<m;i++) { int k = minindex(tab,hptab,m); sol[i]=k+1; hp-=tab[k]; if(hp<=0) { break; } hp+=hptab[k]; tab[k]=-1; if(i==m-1) { printf("TAK\n"); for(int j=0;j<m;j++) printf("%d ",sol[i]); return 0; } } for(int i=0;i<m;i++) { int k = maxindex(hptab,mtab,m); sol[i]=k+1; hp1-=mtab[k]; if(hp1<=0) { printf("NIE\n"); return 0; } hp1+=hptab[k]; hptab[k]=-1; if(i==m-1) { printf("TAK\n"); for(int j=0;j<m;j++) printf("%d ",sol[j]); return 0; } } 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 | #include <iostream> using namespace std; int minindex(int *t,int *l,int m) { int min = 0; for(int i=1;i<m;i++) { if(t[i]<0) continue; if(t[min]<0) min=i; else if (t[i]<t[min]) min=i; else if(t[i]==t[min] && l[i]>l[min]) min=i; } return min; } int maxindex(int *t,int *l,int m) { int min = 0; for(int i=1;i<m;i++) { if(t[i]<0) continue; if(t[min]<0) min=i; else if (t[i]>t[min]) min=i; else if(t[i]==t[min] && l[i]<l[min]) min=i; } return min; } int main() { int m; int hp; scanf("%d %d",&m,&hp); int hp1 = hp; int* tab= new int[m]; int* hptab = new int[m]; int* mtab = new int[m]; for(int i=0;i<m;i++) { scanf("%d %d",&tab[i],&hptab[i]); mtab[i] = tab[i]; } int* sol = new int[m]; for(int i=0;i<m;i++) { int k = minindex(tab,hptab,m); sol[i]=k+1; hp-=tab[k]; if(hp<=0) { break; } hp+=hptab[k]; tab[k]=-1; if(i==m-1) { printf("TAK\n"); for(int j=0;j<m;j++) printf("%d ",sol[i]); return 0; } } for(int i=0;i<m;i++) { int k = maxindex(hptab,mtab,m); sol[i]=k+1; hp1-=mtab[k]; if(hp1<=0) { printf("NIE\n"); return 0; } hp1+=hptab[k]; hptab[k]=-1; if(i==m-1) { printf("TAK\n"); for(int j=0;j<m;j++) printf("%d ",sol[j]); return 0; } } return 0; } |