#include <iostream> #include "bits/stdc++.h" using namespace std; using pi = pair<int, int>; using vpi = vector<pi>; using vi = vector<int>; using mib = map<int, bool>; int main() { int n; cin >> n; vi catfish; for (int i = 0; i < n; ++i) { int x; cin >> x; catfish.push_back(x); } mib can_eat_next; vi orig_catfish(catfish); sort(catfish.begin(), catfish.end()); int64_t total_mass_of_smaller = 0; bool is_first = true; int i = 0; while(i < n) { int current_mass = catfish[i]; int64_t total_mass_of_equal = catfish[i]; while(i < n - 1 && (i == n-1 || catfish[i] == catfish[i+1])) { total_mass_of_equal += catfish[i]; i++; } if(i == n) { i -= 1; } int64_t available_mass = total_mass_of_smaller + current_mass; if(!is_first) { available_mass += total_mass_of_equal - current_mass; } if((i == n - 1 && !is_first) || (i != n - 1 && available_mass > catfish[i+1] )) { can_eat_next[catfish[i]] = true; } else {can_eat_next[catfish[i]] = false;} is_first = false; total_mass_of_smaller += total_mass_of_equal; i++; } mib can_become_king; for(auto it = can_eat_next.rbegin(); it != can_eat_next.rend() ; ++it) { auto [mass, res] = *it; if(res) { can_become_king[mass] = true; } else { break; } } for(auto el: orig_catfish) { if(can_become_king.find(el) != can_become_king.end()) { cout << "T"; } else { cout << "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 | #include <iostream> #include "bits/stdc++.h" using namespace std; using pi = pair<int, int>; using vpi = vector<pi>; using vi = vector<int>; using mib = map<int, bool>; int main() { int n; cin >> n; vi catfish; for (int i = 0; i < n; ++i) { int x; cin >> x; catfish.push_back(x); } mib can_eat_next; vi orig_catfish(catfish); sort(catfish.begin(), catfish.end()); int64_t total_mass_of_smaller = 0; bool is_first = true; int i = 0; while(i < n) { int current_mass = catfish[i]; int64_t total_mass_of_equal = catfish[i]; while(i < n - 1 && (i == n-1 || catfish[i] == catfish[i+1])) { total_mass_of_equal += catfish[i]; i++; } if(i == n) { i -= 1; } int64_t available_mass = total_mass_of_smaller + current_mass; if(!is_first) { available_mass += total_mass_of_equal - current_mass; } if((i == n - 1 && !is_first) || (i != n - 1 && available_mass > catfish[i+1] )) { can_eat_next[catfish[i]] = true; } else {can_eat_next[catfish[i]] = false;} is_first = false; total_mass_of_smaller += total_mass_of_equal; i++; } mib can_become_king; for(auto it = can_eat_next.rbegin(); it != can_eat_next.rend() ; ++it) { auto [mass, res] = *it; if(res) { can_become_king[mass] = true; } else { break; } } for(auto el: orig_catfish) { if(can_become_king.find(el) != can_become_king.end()) { cout << "T"; } else { cout << "N"; } } return 0; } |