///MEMENTO MEMO, MEMENTO LONG LONG #include <bits/stdc++.h> #define DEBUG if(1) #define COUT cout << "\e[36m" #define ENDL "\e[39m" << endl #define VAR(v) " [\e[32m" << #v << "\e[36m=\e[91m" << v << "\e[36m] " #define ST first #define ND second using namespace std; typedef long long LL; //struct Fish //{ // int size, pos; // bool king; //}; // //inline bool cmp_size(Fish a, Fish b) //{ // //} int n; bool can_king(LL nominee, const vector<int>& fishes) { bool ate_himself = false; LL sum_weight = nominee; for (int i = n-1; i >= 0;--i) { if(!ate_himself && nominee == fishes[i]) { ate_himself = true; } else { if (fishes[i] >= sum_weight) { return false; } else { sum_weight += fishes[i]; } } } return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; // vector<pair<int, int>> fishes(n); vector<int> fishes(n); for (int i = 0; i < n; ++i) { cin >> fishes[i]; // fishes[i].ND = i; } vector<int> org_fishes = fishes; sort(fishes.rbegin(), fishes.rend()); if(n > 1 && fishes.front() == fishes.back()) { for (int i = 0; i < n; ++i) { cout << "N"; } cout << endl; } else { int b = 0, e = n-1, s = (b+e)/2; while (b < e) { if (can_king(fishes[s], fishes)) { b = s; s = (b + e + 1) / 2; } else { e = s - 1; s = (b + e) / 2; } } int min_weight = fishes[s]; for (auto el : org_fishes) { cout << ((el >= min_weight) ? "T" : "N"); } cout << endl; } }
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 | ///MEMENTO MEMO, MEMENTO LONG LONG #include <bits/stdc++.h> #define DEBUG if(1) #define COUT cout << "\e[36m" #define ENDL "\e[39m" << endl #define VAR(v) " [\e[32m" << #v << "\e[36m=\e[91m" << v << "\e[36m] " #define ST first #define ND second using namespace std; typedef long long LL; //struct Fish //{ // int size, pos; // bool king; //}; // //inline bool cmp_size(Fish a, Fish b) //{ // //} int n; bool can_king(LL nominee, const vector<int>& fishes) { bool ate_himself = false; LL sum_weight = nominee; for (int i = n-1; i >= 0;--i) { if(!ate_himself && nominee == fishes[i]) { ate_himself = true; } else { if (fishes[i] >= sum_weight) { return false; } else { sum_weight += fishes[i]; } } } return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; // vector<pair<int, int>> fishes(n); vector<int> fishes(n); for (int i = 0; i < n; ++i) { cin >> fishes[i]; // fishes[i].ND = i; } vector<int> org_fishes = fishes; sort(fishes.rbegin(), fishes.rend()); if(n > 1 && fishes.front() == fishes.back()) { for (int i = 0; i < n; ++i) { cout << "N"; } cout << endl; } else { int b = 0, e = n-1, s = (b+e)/2; while (b < e) { if (can_king(fishes[s], fishes)) { b = s; s = (b + e + 1) / 2; } else { e = s - 1; s = (b + e) / 2; } } int min_weight = fishes[s]; for (auto el : org_fishes) { cout << ((el >= min_weight) ? "T" : "N"); } cout << endl; } } |