1. 程式人生 > >Distances to Zero (思維+模擬)

Distances to Zero (思維+模擬)

pac div style namespace strong sof 16px 宋體 題意

vj鏈接:

https://vjudge.net/contest/235444#problem/B

題意:

求每個數到離它最近的0的距離,0到本身距離是0。

測試樣例:

輸入:

9

2 1 0 3 0 0 3 2 4
輸出:
2 1 0 1 0 0 1 2 3
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm> 
 5 using namespace std;
 6 const int N=2e5+10;
 7 int n;
 8 int a[N],b[N],c[N];
9 int main() 10 { 11 while(scanf("%d", &n) == 1) 12 { 13 int x = 0; 14 for(int i=0;i<n;i++) 15 { 16 scanf("%d", &a[i]); 17 if(!a[i]) b[x++] = i; //找出所有0的下標並存入數組b 18 } 19 20 int k = 0; 21 for(int i=0;i<b[x-1
];i++) 22 { 23 for(int j=b[i]; j<=b[i+1];j++) 24 { 25 a[j]=max(0,min(j-b[i],b[i+1]-j));//兩個0之間的數包含兩個0,min來判斷該數到離它最近的它左邊的0近還是右邊的零近 ,max用來使0到它本身的距離等於0 26 } 27 } 28 for(int i=0;i<b[0];i++) 29 { 30 a[i]=b[0]-i; 31
} 32 for(int i=b[x-1];i<n;i++) 33 { 34 a[i]=i-b[x-1]; 35 } 36 for(int i=0;i<n;i++) 37 { 38 printf("%d%c", a[i],i<n-1? :\n); 39 } 40 } 41 return 0; 42 }

 

Distances to Zero (思維+模擬)