【题目】
数组重建
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;
}