#include <bits/stdc++.h>
using namespace std;
int n,p,k,mid;
long long t[500005];
vector <long long> v;
bool chk(int x)
{
long long s=v[x];
for (int i=0; i<n; i++)
{
if (i==x) continue;
if (s>v[i]) s+=v[i];
else return false;
}
return true;
}
int main()
{
scanf("%d",&n);
for (int i=0; i<n; i++)
{
scanf("%lld",&t[i]);
v.push_back(t[i]);
}
sort(v.begin(),v.end());
k=n-1;
while (p<k)
{
mid=(p+k)/2;
if(chk(mid)) k=mid;
else p=mid+1;
}
if (!chk(p))
{
for (int i=0; i<n; i++)
{
printf("N");
}
return 0;
}
for (int i=0; i<n; i++)
{
if (t[i]<v[p]) printf("N");
else printf("T");
}
}
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 | #include <bits/stdc++.h> using namespace std; int n,p,k,mid; long long t[500005]; vector <long long> v; bool chk(int x) { long long s=v[x]; for (int i=0; i<n; i++) { if (i==x) continue; if (s>v[i]) s+=v[i]; else return false; } return true; } int main() { scanf("%d",&n); for (int i=0; i<n; i++) { scanf("%lld",&t[i]); v.push_back(t[i]); } sort(v.begin(),v.end()); k=n-1; while (p<k) { mid=(p+k)/2; if(chk(mid)) k=mid; else p=mid+1; } if (!chk(p)) { for (int i=0; i<n; i++) { printf("N"); } return 0; } for (int i=0; i<n; i++) { if (t[i]<v[p]) printf("N"); else printf("T"); } } |
English