#include <stdio.h> #include <algorithm> #include <string.h> #include<vector> #include<iostream> using namespace std; struct item{ int p; int m; int dif; int index; }; item p[100001],m[100001]; int res[100001]; void show(item t[],int n) { for(int i=0;i<n;i++){ printf("%d ",t[i].m); } } bool cmp(item a,item b){ return a.m<b.m; } bool cmp2(item a,item b){ return a.m>b.m; } int main() { int n,power; scanf("%d%d",&n,&power); long long sum=power; int mi=0,pi=0; for(int i=0;i<n;i++){ int a,b,dif; scanf("%d%d",&a,&b); dif=b-a; if(dif>=0){ p[pi].p=b; p[pi].m=a; p[pi].dif=dif; p[pi].index=i+1; pi++; }else{ m[mi].p=b; m[mi].m=a; m[mi].dif=dif; m[mi].index=i+1; mi++; } } sort(p,p+pi,cmp); sort(m,m+mi,cmp2); int ri=0; bool flag=true; for(int i=0;i<pi;i++){ if(sum-p[i].m>0){ sum+=p[i].dif; res[ri]=p[i].index; ri++; } else{ flag=false; break; } } if(flag){ for(int i=0;i<mi;i++){ if(sum-m[i].m>0){ sum+=m[i].dif; res[ri]=m[i].index; ri++; } else{ flag=false; break; } } } if(flag){ printf("%s\n","TAK"); for(int i=0;i<n;i++){ printf("%d ",res[i]);} printf("\n"); }else{ printf("%s\n","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 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 | #include <stdio.h> #include <algorithm> #include <string.h> #include<vector> #include<iostream> using namespace std; struct item{ int p; int m; int dif; int index; }; item p[100001],m[100001]; int res[100001]; void show(item t[],int n) { for(int i=0;i<n;i++){ printf("%d ",t[i].m); } } bool cmp(item a,item b){ return a.m<b.m; } bool cmp2(item a,item b){ return a.m>b.m; } int main() { int n,power; scanf("%d%d",&n,&power); long long sum=power; int mi=0,pi=0; for(int i=0;i<n;i++){ int a,b,dif; scanf("%d%d",&a,&b); dif=b-a; if(dif>=0){ p[pi].p=b; p[pi].m=a; p[pi].dif=dif; p[pi].index=i+1; pi++; }else{ m[mi].p=b; m[mi].m=a; m[mi].dif=dif; m[mi].index=i+1; mi++; } } sort(p,p+pi,cmp); sort(m,m+mi,cmp2); int ri=0; bool flag=true; for(int i=0;i<pi;i++){ if(sum-p[i].m>0){ sum+=p[i].dif; res[ri]=p[i].index; ri++; } else{ flag=false; break; } } if(flag){ for(int i=0;i<mi;i++){ if(sum-m[i].m>0){ sum+=m[i].dif; res[ri]=m[i].index; ri++; } else{ flag=false; break; } } } if(flag){ printf("%s\n","TAK"); for(int i=0;i<n;i++){ printf("%d ",res[i]);} printf("\n"); }else{ printf("%s\n","NIE"); } return 0; } |