#include <iostream> #include <vector> #include <algorithm> using namespace std; typedef long long ll; vector <ll> wej(500002); vector <ll> licz(500002); bool cmp (const ll&a, const ll&b) { return a>b; } bool czyl (int p,ll wy) { if(p==0)return true; if(p==1 && wy>licz[0])return true; if(p==1 && wy<licz[0])return false; if(licz[p-1]<wy)czyl(p-1,wy+licz[p-1]); else return false; } bool czyp (int p,int k,ll wy) { if(k==p)return true; if(wy>licz[k]) czyp(p,k-1,wy+licz[k]); else return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; ll wynp=0,od; cin>>n; for(int i=0;i<n;i++) { cin>>wej[i]; licz[i]=wej[i]; } sort(licz.begin(),licz.begin()+n,cmp); wynp=licz[n-1]; od=licz[0]; for(int i=n-2;i>=0;i--) { if(licz[0]==licz[n-1]) { od=licz[0]+1; break; } if(licz[i]>licz[i+1] && true==czyl(i,wynp+licz[i])) { od=licz[i]; break; } if(licz[i]==licz[i+1] && czyp(i,n-1,licz[i])==true && true==czyl(i,wynp+licz[i])) { od=licz[i]; break; } wynp+=licz[i]; } for(int i=0;i<n;i++) { if(wej[i]>=od) cout<<'T'; else 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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; typedef long long ll; vector <ll> wej(500002); vector <ll> licz(500002); bool cmp (const ll&a, const ll&b) { return a>b; } bool czyl (int p,ll wy) { if(p==0)return true; if(p==1 && wy>licz[0])return true; if(p==1 && wy<licz[0])return false; if(licz[p-1]<wy)czyl(p-1,wy+licz[p-1]); else return false; } bool czyp (int p,int k,ll wy) { if(k==p)return true; if(wy>licz[k]) czyp(p,k-1,wy+licz[k]); else return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; ll wynp=0,od; cin>>n; for(int i=0;i<n;i++) { cin>>wej[i]; licz[i]=wej[i]; } sort(licz.begin(),licz.begin()+n,cmp); wynp=licz[n-1]; od=licz[0]; for(int i=n-2;i>=0;i--) { if(licz[0]==licz[n-1]) { od=licz[0]+1; break; } if(licz[i]>licz[i+1] && true==czyl(i,wynp+licz[i])) { od=licz[i]; break; } if(licz[i]==licz[i+1] && czyp(i,n-1,licz[i])==true && true==czyl(i,wynp+licz[i])) { od=licz[i]; break; } wynp+=licz[i]; } for(int i=0;i<n;i++) { if(wej[i]>=od) cout<<'T'; else cout<<'N'; } } |