1 条题解
-
0
自动搬运
来自洛谷,原作者为

Falashiro
丝之歌什么时候出搬运于
2025-08-24 22:29:21,当前版本为作者最后更新于2021-02-08 13:21:32,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
,,
若 ,可以给出构造解:
,无法表示出 。
若 ,无法分为 个不相同的正整数,显然无解。
若 ,
假设有解,不妨认为构造出来的序列 单调递增,
设 ,那么所有由 个不相同的正整数组成且和为 的单调递增的序列均可以这么得到:有一个初始为 的序列,每次给一个数加 ,加 次,中途需要保持序列单调递增,这相当于进行若干次后缀加,总的增量为 。结论:
若 ,对于得到的任意一个序列 ,和任意一个 ,都有 。
证明:
,即 ,
如果要使上述结论不成立,设要使得它在 的位置不成立,显然一直给 加 是最优的,给 加 的需要进行 次加法, 最多能被加 $\lfloor\frac{t}{n-i+1}\rfloor\le \lfloor\frac{n-1}{n-i+1}\rfloor$ 次,
现在需要证明 是不可能的,
即证明 $i+\lfloor\frac{n-1}{n-i+1}\rfloor\le \frac{i\times(i-1)}{2}+1$,
假设现在 已经固定,则 时, 最大,它的值为 ,
现在需要证明 ,
即 ,
在 时,即 时,上式成立,证毕。
接下来可以利用这个结论完成本题证明:
若 ,暴力枚举可得无解,若 :
因为 ,后缀加无法对 造成影响,所以 ,第一个数可以表示出区间 内的所有正整数,假设目前已经得到了 至 可以表示区间 内的所有正整数且 ,则加入 后一定可以表示区间 内的所有正整数,由之前的结论可得:,那么 ,当前的区间右端点仍为已加入的所有数的和,最后将 加入后,一定可以表示区间 内所有正整数,即可以表示出区间 内所有正整数。
所以当 时,无解。
code:
#include<bits/stdc++.h> using namespace std; int read(){ int w=0; char c=getchar(); while(c<'0'||c>'9')c=getchar(); while(c>='0'&&c<='9')w=w*10+c-48,c=getchar(); return w; } int T,n,m; signed main(){ T=read(); while(T--){ n=read(),m=read(); if(n*(n+3)/2>m){ puts("-1"); continue; } for(int i=2;i<=n;i++) printf("%d ",i); printf("%d\n%d\n",m-(n-1)*(n+2)/2,m-1); } return 0; }
- 1
信息
- ID
- 5691
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者