Keith would like greedy --cf1249C Linear +

/ * 
. 1. 3 + ... + + +. 9. 3 n-^ <^. 3 (n-+. 1), according to this idea look like greedy
* /
#include <bits / STDC ++ H>. The using namespace STD; #define LL Long Long LL P [ 100 ], In Flag [ 40 ], S [ 100 ]; int main () { p[0]=s[0]=1; for(int i=1;i<=39;i++) p[i]=p[i-1]*3,s[i]=s[i-1]+p[i]; int Q;cin>>Q; while(Q--){ ll n;cin>>n; ll tmp=n,sum=0; int flag[40]={},Max=0; for(int i=38;i>=0;i--) if(tmp>=p[i]){ Max=max(Max,i); tmp-=p[i],sum+=p[i]; flag[i]=1; } if(tmp==0){ cout<<n<<'\n'; }else if(n>s[Max]){ cout<<p[Max+1]<<'\n'; }else { ll ans=0,id; for(int i=0;i<=38;i++) if(flag[i]==0){ id=i;break; } ans+=p[id]; for(int i=id+1;i<=38;i++) if(flag[i])ans+=p[i]; cout<<ans<<'\n'; } } }

 

Guess you like

Origin www.cnblogs.com/zsben991126/p/11741633.html