点击打开链接 B - Distances to Zero #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; int a[200005]; int b[200005]; int c[200005]; int main() { int n,i,j,s,m=0; int k=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]==0) { b[k]=i; k++; } } for(i=0;i<n;i++) { if(i<=b[m]) c[i]=b[m]-i; else { if(i>b[m]&&i<=b[m+1]) c[i]=min(i-b[m],b[m+1]-i); if(i==b[m+1]&&(m+1)<=k-1) { c[i]=0; m++; } if(i>b[k-1]) c[i]=c[i-1]+1; } } for(i=0;i<n;i++) { if(i<n-1) printf("%d ",c[i]); else printf("%d\n",c[i]); } return 0; }