#include <iostream>
#include <set>
#include <utility>
namespace {
using std::cin;
using std::cout;
using std::string;
using weight_pos_t = std::pair<size_t, size_t>;
using weight_pos_set_t = std::set<weight_pos_t>;
inline char const T_ANS = 'T';
inline char const N_ANS = 'N';
inline char const U_ANS = '?';
}
int main() {
size_t n;
size_t weight;
weight_pos_set_t catfishes;
size_t accum_weight = 0;
cin >> n;
for (size_t k = 0; k < n; ++k) {
cin >> weight;
accum_weight += weight;
catfishes.insert({weight, k});
}
string answer(n, U_ANS);
auto curr_weight_it = catfishes.rbegin();
char last_ans = T_ANS;
if (catfishes.rbegin()->first == catfishes.begin()->first &&
catfishes.size() > 1)
last_ans = N_ANS;
for (auto it = catfishes.rbegin(); it != catfishes.rend(); ++it) {
if (last_ans == T_ANS && it->first != curr_weight_it->first) {
if (accum_weight > curr_weight_it->first &&
it->first > catfishes.begin()->first)
last_ans = T_ANS;
else
last_ans = N_ANS;
curr_weight_it = it;
}
answer.at(it->second) = last_ans;
accum_weight -= it->first;
}
cout << answer;
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 | #include <iostream> #include <set> #include <utility> namespace { using std::cin; using std::cout; using std::string; using weight_pos_t = std::pair<size_t, size_t>; using weight_pos_set_t = std::set<weight_pos_t>; inline char const T_ANS = 'T'; inline char const N_ANS = 'N'; inline char const U_ANS = '?'; } int main() { size_t n; size_t weight; weight_pos_set_t catfishes; size_t accum_weight = 0; cin >> n; for (size_t k = 0; k < n; ++k) { cin >> weight; accum_weight += weight; catfishes.insert({weight, k}); } string answer(n, U_ANS); auto curr_weight_it = catfishes.rbegin(); char last_ans = T_ANS; if (catfishes.rbegin()->first == catfishes.begin()->first && catfishes.size() > 1) last_ans = N_ANS; for (auto it = catfishes.rbegin(); it != catfishes.rend(); ++it) { if (last_ans == T_ANS && it->first != curr_weight_it->first) { if (accum_weight > curr_weight_it->first && it->first > catfishes.begin()->first) last_ans = T_ANS; else last_ans = N_ANS; curr_weight_it = it; } answer.at(it->second) = last_ans; accum_weight -= it->first; } cout << answer; return 0; } |
English