#include <algorithm> #include <iostream> #include <vector> using namespace std; struct Fish { int index, value; bool operator <(Fish fish) const { if(value == fish.value) { return index < fish.index; } return value < fish.value; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int size; cin >> size; vector<Fish> fish(size); for(int index = 0; index < size; index++) { cin >> fish[index].value; fish[index].index = index; } sort(fish.begin(), fish.end()); int begin = 0, end = size - 1; while(begin != end) { int middle = (begin + end + 1) / 2; long long current = fish[middle].value; int index = 0; while(index < size && fish[index].value < current) { if(index != middle) { current += fish[index].value; } index++; } if(index == size) { end = middle - 1; } else { begin = middle; } } vector<bool> results(size); for(int index = begin + 1; index < size; index++) { results[fish[index].index] = true; } for(int index = 0; index < size; index++) { cout << (results[index] ? 'T' : 'N'); } 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 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 | #include <algorithm> #include <iostream> #include <vector> using namespace std; struct Fish { int index, value; bool operator <(Fish fish) const { if(value == fish.value) { return index < fish.index; } return value < fish.value; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int size; cin >> size; vector<Fish> fish(size); for(int index = 0; index < size; index++) { cin >> fish[index].value; fish[index].index = index; } sort(fish.begin(), fish.end()); int begin = 0, end = size - 1; while(begin != end) { int middle = (begin + end + 1) / 2; long long current = fish[middle].value; int index = 0; while(index < size && fish[index].value < current) { if(index != middle) { current += fish[index].value; } index++; } if(index == size) { end = middle - 1; } else { begin = middle; } } vector<bool> results(size); for(int index = begin + 1; index < size; index++) { results[fish[index].index] = true; } for(int index = 0; index < size; index++) { cout << (results[index] ? 'T' : 'N'); } cout << '\n'; } |