Codeforces803B Distances to Zero

来源:互联网 发布:腾讯云数据库重启 编辑:程序博客网 时间:2024/05/22 10:32

链接

  http://codeforces.com/problemset/problem/803/B

题目大意

  给你一个序列,对每个数求出离它最近的0跟它的距离。

题解

  f1[i]表示左边最近的0和这个数的距离,f2[i]表示右边最近的0和这个数的距离。
  如果numi=0f1[i]=f2[i]=0,否则f1[i]=f1[i1]+1 f2[i]=f2[i+1]+1
  最后ansi=min(f1[i],f2[i])

代码

//dp#include <cstdio>#include <algorithm>#define maxn 200005#define inf 0x3f3f3f3fusing 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;}
0 0
原创粉丝点击