CodeForces 803B Distances to Zero

来源:互联网 发布:动感新时代淘宝 编辑:程序博客网 时间:2024/06/05 06:58

题目链接:http://codeforces.com/contest/803/problem/B
题意:给你一个序列A,让你输出一个序列d,d[i]表示离a[i]最近的0的距离
解析:我的做法是,先把所有的0的位置存到一个数组b里,然后枚举每一个a[i]的位置,去二分b这个数组,找到一个刚好大于等于i的值

#include <bits/stdc++.h>using namespace std;const int maxn = 2e5+100;int a[maxn];int ans[maxn];int main(void){    int n;    scanf("%d",&n);    int tmp = 0,tt;    for(int i=0;i<n;i++)    {        scanf("%d",&a[i]);        if(a[i]==0)            ans[tmp++] = i;    }    for(int i=0;i<n;i++)    {        if(i)printf(" ");        int pos1 = lower_bound(ans,ans+tmp,i)-ans;        if(pos1==tmp)            pos1--;        if(pos1>=1)            tt = min(abs(ans[pos1-1]-i),abs(ans[pos1]-i));        else            tt = abs(ans[pos1]-i);        if(pos1+1<tmp)            tt = min(tt,abs(ans[pos1+1]-i));        printf("%d",tt);    }    return 0;}
0 0
原创粉丝点击