牛客OI周赛15-提高组B题

恢复数列

https://ac.nowcoder.com/acm/contest/4912/B

图片说明
仅对官方题解一个比较(通俗??)的理解
题解:当时有解
证明:显然,求得序列中中,若给其从小到大排个序,那么前个数必然是相同的,则有
那么如果对于给定的有解的话,必然使得 有解,其实就是把()这组合法序列的替换成就是新的合法序列了。
那么可以递归下去都是合法序列。
显然 &&时无解,所以递减到最后只能是;
即有 解得,即
得证。
构造办法,从上述可知,,那么构造办法就可以为第一个为,接下来x个0,接下来x-1个为1,x-1个为2...
代码

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
using namespace std;
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int n,x;
    cin>>n>>x;
    int t=(n-x-1)/(x-1)+1;
    cout<<t<<" ";
    for(int i=1;i<=x;i++)
        cout<<0<<" ";
    int res=1;
    for(int i=1;i<=n-x-1;i++)
    {
        if(i%(x-1)==0)cout<<res++<<" ";
        else cout<<res<<" ";
    }
    cout<<endl;
}
全部评论

相关推荐

点赞 评论 收藏
分享
5 收藏 评论
分享
牛客网
牛客企业服务