// // main.cpp // PA_2014_BOH // // Created by Michal Kowalski on 13/05/14. // Copyright (c) 2014 Michal Kowalski. All rights reserved. // #include <iostream> #include <vector> #include <functional> #include <algorithm> using namespace std; struct E{ long long val; int id; }; int n,z; int D[100009]; int A[100009]; long long Z; vector<E> GM; vector<E> LM; int SEQ[100009]; int *pSEQ = SEQ; bool operator < (const E & e1,const E & e2) { return e1.val > e2.val; } int main(int argc, const char * argv[]) { scanf("%d %d",&n,&z); for(int i=1;i<=n;++i) { int d,a; scanf("%d %d",&d,&a); D[i]=d;A[i]=a; if ((-d+a)>=0) { E ee; ee.val = d; ee.id = i; GM.push_back(ee); } else { E ee; ee.val = a; ee.id = i; LM.push_back(ee); } } sort(GM.begin(), GM.end()); sort(LM.begin(), LM.end()); Z = z; int gmsize = (int)GM.size(); for (int i=gmsize-1; i>=0; --i) { int m_id = GM[i].id; if ( (Z - D[m_id]) > 0) { Z = Z - D[m_id]+A[m_id]; *pSEQ = m_id; ++pSEQ; } else { printf("NIE\n"); return 0; } } for (int i=0; i< LM.size(); ++i) { int m_id = LM[i].id; if ( (Z - D[m_id]) > 0) { Z = Z - D[m_id]+A[m_id]; *pSEQ = m_id; ++pSEQ; }else { printf("NIE\n"); return 0; } } printf("TAK\n"); for(int x=0;x<n;++x) printf("%d ",SEQ[x]); printf("\n"); 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 | // // main.cpp // PA_2014_BOH // // Created by Michal Kowalski on 13/05/14. // Copyright (c) 2014 Michal Kowalski. All rights reserved. // #include <iostream> #include <vector> #include <functional> #include <algorithm> using namespace std; struct E{ long long val; int id; }; int n,z; int D[100009]; int A[100009]; long long Z; vector<E> GM; vector<E> LM; int SEQ[100009]; int *pSEQ = SEQ; bool operator < (const E & e1,const E & e2) { return e1.val > e2.val; } int main(int argc, const char * argv[]) { scanf("%d %d",&n,&z); for(int i=1;i<=n;++i) { int d,a; scanf("%d %d",&d,&a); D[i]=d;A[i]=a; if ((-d+a)>=0) { E ee; ee.val = d; ee.id = i; GM.push_back(ee); } else { E ee; ee.val = a; ee.id = i; LM.push_back(ee); } } sort(GM.begin(), GM.end()); sort(LM.begin(), LM.end()); Z = z; int gmsize = (int)GM.size(); for (int i=gmsize-1; i>=0; --i) { int m_id = GM[i].id; if ( (Z - D[m_id]) > 0) { Z = Z - D[m_id]+A[m_id]; *pSEQ = m_id; ++pSEQ; } else { printf("NIE\n"); return 0; } } for (int i=0; i< LM.size(); ++i) { int m_id = LM[i].id; if ( (Z - D[m_id]) > 0) { Z = Z - D[m_id]+A[m_id]; *pSEQ = m_id; ++pSEQ; }else { printf("NIE\n"); return 0; } } printf("TAK\n"); for(int x=0;x<n;++x) printf("%d ",SEQ[x]); printf("\n"); return 0; } |