恢复数列

题目链接
比赛链接

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge,64bit IO Format: %lld

题目描述

小y的数学作业不小心被泼上了墨水。有道题看不清了,现在他想请你帮他恢复这道题。 这道数学题原型如下:
在这里插入图片描述
幸运的是,小y依然记得自己所求得的答案x。现在请你帮他找回这个数列a。
你的输出需要保证0≤ai≤n

输入描述:

输入共一行两个用空格隔开的正整数n,x。含义见【题目描述】

输出描述:

输出共一行n个用空格隔开的正整数,第i个数字表示ai 当你输出多于n个数字时,只有前n个数字有效。 如果有多种答案,你只需要输出任意一种
输入保证有解。

示例1
输入

12 6

输出

2 0 0 0 0 0 0 1 1 1 1 1

说明

62=60+60+60+60+60+60+61+61+61+61+61=36
备注:

对于30%的数据满足:2≤x<n≤7
对于50%的数据满足:2≤x<n≤103
对于100%的数据满足:2≤x<n≤106
题解:
可以证出n-2=k(x-1)
最方便的构造就是:
第一个是k
后面x个是0
x-1个是1
x-1个是2
x-1个是3
直到把n个数填满
x0+…x0+x1+…x1+x2+…+x2+…
=x+ (x-1)(x1+x2+x3+…+xk)
x+(x-1)*m
等比数列求和得到m
=xk

#include<bits/stdc++.h>
typedef long long ll;
const ll mod=998244355;
const int maxn=2010;
ll a[maxn],a1[maxn],b[maxn];
using namespace std;
int n,m;
ll sum=1,ant;
int main()
{
    int n,x;
    cin>>n>>x;
    int w=(n-2)/(x-1);
    cout<<w<<" "<<0<<" ";
    for(int i=w-1;i>=0;i--)
    {
        for(int j=1;j<=x-1;j++)
        {
            cout<<i<<" ";
        }
    }
    return 0;

} 

原文链接: https://www.cnblogs.com/Jozky/p/13928309.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    恢复数列

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/340794

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午12:46
下一篇 2023年3月2日 上午12:47

相关推荐