社区讨论

关于 ICPC 2022 沈阳 F 题的正确性证明

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj1pvmo
此快照首次捕获于
2025/11/03 19:17
4 个月前
此快照最后确认于
2025/11/03 19:17
4 个月前
查看原帖
给没读过题的读者简要说一下,大致就是在一系列观察之后,题意会变为:给定一个正整数 n106n \le 10^6,保证 nmod4=0n \bmod 4 = 0nmod4=3n \bmod 4 = 3,试构造一个数列,使得数列中所有数均为正整数,且它们的和等于 nn,平方和等于 n(n1)2\frac{n(n-1)}{2}
然后我的乱搞做法构造了出来。
CPP
int solve(long long req,int w)
{
    if(req<w) return 0;
    if(req==w)
    {
        while(req--) v.push_back(1);
        return w; 
    }
    long long sum=0;
    for(long long x=sqrt(req);x>0;x--)
    {
        v.push_back(x);
        sum=x+solve(req-x*x,w-x);
        if(sum==w) return sum;
        v.pop_back();
    }
    return sum;
}
官方题解则说,“每次取尽可能大的数即可”。
现在,我好奇的是,这个问题在 nn 更大的时候仍然是有解的吗?如果是,怎么证明?以及怎么证明官方题解的构造是正确的?

回复

0 条回复,欢迎继续交流。

正在加载回复...