Naszt
2024-11-14 23:06:58
我场切了?真的假的?飘了。
而且感觉思维和代码复杂度都比官方解答简单。
我们先考虑极端情况
对于
容易想到构造
两两相等即互相整除。
对于
容易想到构造
这样最大也不会到两倍,即两两不整除。
按照类似的思路
对于
构造
这样形成
每
即
我们想要某个
可以贪心的划分长度,使得前面的
这样是最优的,如果把前面的
按照这种方法,只用保证
即
对于
构造
再按照一样的方法添加
直到
还算比较短的 c 风格代码:
long long n,k,t;
main(){
scanf("%Ld%Ld",&n,&k);
for(int i=n-1;i<=k&&t<n;k-=i--,t++)
printf("1 ");
for(int i=n;i<2*n;i++)
for(int j=0;j<=k&&t<n;k-=j++,t++)
printf("%d ",i);
}