#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define INF 500005
unsigned long long n;
vector<pair<unsigned long long, int> > sum;
char res[INF];
int main()
{
scanf("%llu", &n);
unsigned long long one=0;
for(int i=0;i<n;i++){
scanf("%llu", &one);
sum.push_back(make_pair(one,i));
}
sort(sum.begin(),sum.end());
int j=0;
int i=0;
unsigned long long akt=0;
res[sum[0].second]='N';
for(i=1;i<n;i++) {
//printf("%d -> j: %d akt: %llu teraz:%llu\n",i, j,akt,sum[i].first);
if(j==i) {
akt+=sum[i].first;
j++;
}
if(j<i && sum[i].first > sum[i-1].first) {
//printf("ok przesuwam j do i\n");
while(j<i && akt<=sum[n-1].first) {
//printf("aktualny j: %d\n",j);
akt+=sum[j].first;
j++;
}
//printf("akt po przesuwaniu: %llu\n",akt);
akt+=sum[i].first;
j=i+1;
//printf("po dorównaniu j: %d akt: %llu\n",j,akt);
}
while(j<n && akt>sum[j].first && akt<=sum[n-1].first) {
//printf("przesuwam j w prawo\n");
akt+=sum[j].first;
j++;
//printf("po przesunięciu j: %d, akt: %llu\n", j, akt);
}
if(akt>sum[n-1].first) {
//printf("pierszy trafiony\n");
res[sum[i].second]='T';
break;
}else{
res[sum[i].second]='N';
}
}
for(;i<n;i++) {
res[sum[i].second]='T';
}
res[n]=0;
printf("%s\n",res);
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 | #include<cstdio> #include<algorithm> #include<vector> using namespace std; #define INF 500005 unsigned long long n; vector<pair<unsigned long long, int> > sum; char res[INF]; int main() { scanf("%llu", &n); unsigned long long one=0; for(int i=0;i<n;i++){ scanf("%llu", &one); sum.push_back(make_pair(one,i)); } sort(sum.begin(),sum.end()); int j=0; int i=0; unsigned long long akt=0; res[sum[0].second]='N'; for(i=1;i<n;i++) { //printf("%d -> j: %d akt: %llu teraz:%llu\n",i, j,akt,sum[i].first); if(j==i) { akt+=sum[i].first; j++; } if(j<i && sum[i].first > sum[i-1].first) { //printf("ok przesuwam j do i\n"); while(j<i && akt<=sum[n-1].first) { //printf("aktualny j: %d\n",j); akt+=sum[j].first; j++; } //printf("akt po przesuwaniu: %llu\n",akt); akt+=sum[i].first; j=i+1; //printf("po dorównaniu j: %d akt: %llu\n",j,akt); } while(j<n && akt>sum[j].first && akt<=sum[n-1].first) { //printf("przesuwam j w prawo\n"); akt+=sum[j].first; j++; //printf("po przesunięciu j: %d, akt: %llu\n", j, akt); } if(akt>sum[n-1].first) { //printf("pierszy trafiony\n"); res[sum[i].second]='T'; break; }else{ res[sum[i].second]='N'; } } for(;i<n;i++) { res[sum[i].second]='T'; } res[n]=0; printf("%s\n",res); return 0; } |
English