链接
http://codeforces.com/problemset/problem/803/B
题目大意
给你一个序列,对每个数求出离它最近的 0 跟它的距离。
题解
如果
最后
ansi=min(f1[i],f2[i])
代码
//dp
#include <cstdio>
#include <algorithm>
#define maxn 200005
#define inf 0x3f3f3f3f
using namespace std;
int a[maxn], f[maxn], g[maxn], N;
int main()
{
int i;
scanf("%d",&N);
for(i=1;i<=N;i++)scanf("%d",a+i);
f[0]=inf, g[N+1]=inf;
for(i=1;i<=N;i++)
{
if(a[i]==0)f[i]=0;
else f[i]=f[i-1]+1;
}
for(i=N;i;i--)
{
if(a[i]==0)g[i]=0;
else g[i]=g[i+1]+1;
}
for(i=1;i<=N;i++)printf("%d ",min(f[i],g[i]));
return 0;
}