#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; } |