Codeforces 1854E - Game Bundles

发布时间 2023-08-11 22:58:01作者: tzc_wk

ll k;int ord[35],a[65];mt19937 rng(time(0));
int main(){
scanf("%lld",&k);
if(k<=60){printf("%lld\n",k);for(int i=1;i<=k;i++)printf("60 ");return 0;}
for(int i=1;i<=30;i++)ord[i]=i+30;
while(1){
static ll dp[65];memset(dp,0,sizeof(dp));
int lim=rng()%29+1,n=0;dp[0]=1;
while(n<=60){
n++;a[n]=rng()%lim+1;
if(dp[60]+dp[60-a[n]]>k){--n;break;}
for(int i=60;i>=a[n];i--)dp[i]+=dp[i-a[n]];
}ll rk=k-dp[60];
sort(ord+1,ord+31,[&](int x,int y){return dp[60-x]>dp[60-y];});
for(int i=1;i<=30;i++)while(n<60&&rk>=dp[60-ord[i]])a[++n]=ord[i],rk-=dp[60-ord[i]];
if(!rk){
printf("%d\n",n);
for(int i=1;i<=n;i++)printf("%d%c",a[i]," \n"[i==n]);
return 0;
}
}
return 0;
}