#include<bits/stdc++.h>
using namespace std;
vector<long long> sumy;
vector<long long> sum;
bool spr(int a)
{
if(a<0||a>=sumy.size()) return 0;
bool p=0;
long long pom=sumy[a];
for(int i=0; i<sumy.size()-1; ++i){
if(sumy[i]==sumy[a]&&p==0){
p=true;
continue;
}
if(sumy[i]>=pom) return 0;
if(sumy[i]<pom) pom+=sumy[i];
}
return 1;
}
long long bs()
{
int p=0, k=sumy.size()-1, s;
while(k-p>0){
s=(p+k)/2;
if(spr(s)==0&&spr(s+1)==1){
++s;
break;
}
if(spr(s)==1&&spr(s-1)==0){
break;
}
if(spr(s)==1) k=s;
if(spr(s)==0) p=s;
}
return sumy[s];
}
int main()
{
int n;
scanf("%d", &n);
for(int i=0; i<n; ++i){
long long a;
scanf("%lld", &a);
sumy.push_back(a);
sum.push_back(a);
}
sumy.push_back(1000000009);
sort(sumy.begin(), sumy.end());
long long pom=bs();
for(int i=0; i<sum.size(); ++i){
if(sum[i]>=pom) printf("T");
else printf("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 | #include<bits/stdc++.h> using namespace std; vector<long long> sumy; vector<long long> sum; bool spr(int a) { if(a<0||a>=sumy.size()) return 0; bool p=0; long long pom=sumy[a]; for(int i=0; i<sumy.size()-1; ++i){ if(sumy[i]==sumy[a]&&p==0){ p=true; continue; } if(sumy[i]>=pom) return 0; if(sumy[i]<pom) pom+=sumy[i]; } return 1; } long long bs() { int p=0, k=sumy.size()-1, s; while(k-p>0){ s=(p+k)/2; if(spr(s)==0&&spr(s+1)==1){ ++s; break; } if(spr(s)==1&&spr(s-1)==0){ break; } if(spr(s)==1) k=s; if(spr(s)==0) p=s; } return sumy[s]; } int main() { int n; scanf("%d", &n); for(int i=0; i<n; ++i){ long long a; scanf("%lld", &a); sumy.push_back(a); sum.push_back(a); } sumy.push_back(1000000009); sort(sumy.begin(), sumy.end()); long long pom=bs(); for(int i=0; i<sum.size(); ++i){ if(sum[i]>=pom) printf("T"); else printf("N"); } return 0; } |
English