#include <iostream> #include <vector> #include <algorithm> using namespace std; vector<pair<int,int>> t; bool canBe[500005]; int n; bool canBeBest(int k){ long long wielkosc = t[k].first; for (int i = 0; i < t.size(); i++){ if (i != k){ if (t[i].first < wielkosc){ wielkosc += t[i].first; } else { return false; } } } return true; } int main(){ cin >> n; for (int i = 0; i < n; i++){ int a; cin >> a; t.push_back(make_pair(a, i)); } sort(t.begin(), t.end()); int e = 0, f = t.size() - 1, l = n + 1; while (e <= f){ int mid = (e + f) / 2; if (canBeBest(mid)){ l = mid; f = mid - 1; } else { e = mid + 1; } } //cout << l << "\n"; for (int i = l; i < n; i++){ canBe[t[i].second] = true; } for (int i = 0; i < n; i++){ if (canBe[i]){ cout << 'T'; } else { cout << 'N'; } } }
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<pair<int,int>> t; bool canBe[500005]; int n; bool canBeBest(int k){ long long wielkosc = t[k].first; for (int i = 0; i < t.size(); i++){ if (i != k){ if (t[i].first < wielkosc){ wielkosc += t[i].first; } else { return false; } } } return true; } int main(){ cin >> n; for (int i = 0; i < n; i++){ int a; cin >> a; t.push_back(make_pair(a, i)); } sort(t.begin(), t.end()); int e = 0, f = t.size() - 1, l = n + 1; while (e <= f){ int mid = (e + f) / 2; if (canBeBest(mid)){ l = mid; f = mid - 1; } else { e = mid + 1; } } //cout << l << "\n"; for (int i = l; i < n; i++){ canBe[t[i].second] = true; } for (int i = 0; i < n; i++){ if (canBe[i]){ cout << 'T'; } else { cout << 'N'; } } } |