#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <set>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <cstring>
#include <stack>
#include <cstring>
using namespace std;
//Defines
#define FIRST(a) (a).begin()
#define REMOVE_FIRST(a) (a).erase((a).begin())
#define REMOVE_LAST(a) (a).erase(--(a).end())
#define LAST(a) (--(a).end())
#define PRINT_ALL(a) for(typeof((a).begin()) it = (a).begin(); it != (a).end(); it++ ) printf("%d ", *it);
#define ALL(t) (t).begin(),(t).end()
#define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++)
#define REP(i,a,b) for(int (i)=(a);(i)<=(b);++i)
#define REPD(i,a,b) for(int (i)=(a); (i)>=(b);--i)
#define FOR(i,n) for(int (i)=0;(i)<(n);++(i))
#define FORI(i,n) for(int (i)=1;(i)<=(n);++(i))
#define DBG(var) cerr << #var << " = " << var << endl;
#define p_int pair<int, int>
#define v_int vector<int>
#define PB push_back
#define LL long long int
#define MP make_pair
#define f first
#define s second
#define TEST(name) freopen(name, "r", stdin);
#define IOS ios_base::sync_with_stdio(0)
#define print(n){cout<<n<<endl;}
#define mod 1000000009
#define INF 1000000000
//Code starts here
struct triple
{
int first, second, id;
};
struct cmp
{
bool operator()(const triple &a, const triple &b)
{
int c1 = a.s-a.f;
int c2 = b.s-b.f;
if(c1 > 0 && c2 > 0)
return a.f < b.f;
if(c1 > 0 && c2 <= 0)
return true;
if(c1 <= 0 && c2 > 0)
return false;
if(c1 <= 0 && c2 <= 0)
if(a.s == b.s)
return a.f < b.f;
else
return a.s > b.s;
}
};
void end()
{
puts("NIE");
exit(0);
}
int main()
{
//TEST("testy_boh/tak/2.txt");
int n,z,a,b;
scanf("%d%d", &n, &z);
vector<triple> tab;
triple tmp;
FOR(i, n)
{
tmp.id = i;
scanf("%d %d", &tmp.f, &tmp.s);
//daje zysk
tab.PB(tmp);
}
sort(ALL(tab),cmp());
//FOREACH(it, tab) printf("%d %d\n", it->f, it->s);
//FOREACH(it, tab2) printf("%d %d\n", it->f, it->s);
int res[n], cost;
FOR(i, n)
{
cost = tab[i].s-tab[i].f;
//print(cost);
if(tab[i].f >= z || z < 1) end();
z += cost;
res[i] = tab[i].id+1;
}
puts("TAK");
FOR(i, n) printf("%d ", res[i]);
}
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 | #include <iostream> #include <cstdio> #include <vector> #include <cmath> #include <set> #include <algorithm> #include <string> #include <queue> #include <map> #include <cstring> #include <stack> #include <cstring> using namespace std; //Defines #define FIRST(a) (a).begin() #define REMOVE_FIRST(a) (a).erase((a).begin()) #define REMOVE_LAST(a) (a).erase(--(a).end()) #define LAST(a) (--(a).end()) #define PRINT_ALL(a) for(typeof((a).begin()) it = (a).begin(); it != (a).end(); it++ ) printf("%d ", *it); #define ALL(t) (t).begin(),(t).end() #define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) #define REP(i,a,b) for(int (i)=(a);(i)<=(b);++i) #define REPD(i,a,b) for(int (i)=(a); (i)>=(b);--i) #define FOR(i,n) for(int (i)=0;(i)<(n);++(i)) #define FORI(i,n) for(int (i)=1;(i)<=(n);++(i)) #define DBG(var) cerr << #var << " = " << var << endl; #define p_int pair<int, int> #define v_int vector<int> #define PB push_back #define LL long long int #define MP make_pair #define f first #define s second #define TEST(name) freopen(name, "r", stdin); #define IOS ios_base::sync_with_stdio(0) #define print(n){cout<<n<<endl;} #define mod 1000000009 #define INF 1000000000 //Code starts here struct triple { int first, second, id; }; struct cmp { bool operator()(const triple &a, const triple &b) { int c1 = a.s-a.f; int c2 = b.s-b.f; if(c1 > 0 && c2 > 0) return a.f < b.f; if(c1 > 0 && c2 <= 0) return true; if(c1 <= 0 && c2 > 0) return false; if(c1 <= 0 && c2 <= 0) if(a.s == b.s) return a.f < b.f; else return a.s > b.s; } }; void end() { puts("NIE"); exit(0); } int main() { //TEST("testy_boh/tak/2.txt"); int n,z,a,b; scanf("%d%d", &n, &z); vector<triple> tab; triple tmp; FOR(i, n) { tmp.id = i; scanf("%d %d", &tmp.f, &tmp.s); //daje zysk tab.PB(tmp); } sort(ALL(tab),cmp()); //FOREACH(it, tab) printf("%d %d\n", it->f, it->s); //FOREACH(it, tab2) printf("%d %d\n", it->f, it->s); int res[n], cost; FOR(i, n) { cost = tab[i].s-tab[i].f; //print(cost); if(tab[i].f >= z || z < 1) end(); z += cost; res[i] = tab[i].id+1; } puts("TAK"); FOR(i, n) printf("%d ", res[i]); } |
English