【水题】数组重建

【题目】

数组重建

Description

 

durong喜欢玩数组,但是他不小心弄丢了一个数组的一些数字。

他只知道原来数组的元素满足a[i] = (a[i - 1] + 1) % m (1 < i <= n),并且都大于等于0。

现在的数组中弄丢的数字用-1表示。

你需要帮助durong找回丢失的元素, 重建数组。

Input

 

输入第一行为两个整数n, m。

第二行n个整数代表现在的数组。

1 <= n <= 2e5.

2 <= m <= 1e9

-1 <= a[i] < m

保证没有a[i]全为-1的情况。

Output

 

输出n个整数,代表原来的数组。不要输出行末空格。

Sample Input 1 

4 10
7 -1 9 -1

Sample Output 1

7 8 9 0

【思路】比赛的时候我竟然dfs...果然比赛令人智商-50%...除了第一个不是-1的数前面会有-1外,后面不是-1的数前面的-1都会被前面的那个兄弟改掉啊..我到底在想什么...

【代码】

#include<iostream>
using namespace std;
const int M=2e5+10;
int main()
{
    int n,m;
    cin>>n>>m;
    int a[M];
    int flag=0;
    int p;
    for(int i=0;i<n;++i)
    {
        cin>>a[i];
        if(a[i]!=-1&&!flag)
        {
            flag=1;
            p=i;
        }
    }
    for(int i=p-1;i>=0;i--)
    {
        a[i]=(a[i+1]+m-1)%m;
    }
    for(int i=p+1;i<n;i++)
    {
        a[i]=(a[i-1]+1)%m;
    }
    cout<<a[0];
    for(int i=1;i<n;++i)
    {
        cout<<" "<<a[i];
    }
    cout<<endl;

}

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页