本文主要是介绍Codeforces 803 B. Distances to Zero(模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:http://codeforces.com/problemset/problem/803/B
题目大意 :给你一列数字,问每个数字的下标距离最近的数字0的下标的距离是多少。
思路:先找到每一个0的位置,对于在第一个0之前的答案就是第一个0的位置减它的位置,介于第一个0和最后一个0中间的就比较它和前头最近的0和后头最近的0的距离,最后一个0之后的就是它的位置减最后一个0的位置,对于中间那部分我们可以记录当前位置右边最近的是第几个0,每一次超过的时候对这个值更新。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int a[maxn];
vector <int> v;
int main()
{int n; cin >> n;for(int i = 1; i <= n; i++){scanf("%d",&a[i]);if(a[i] == 0) v.push_back(i);}v.push_back(0);int cnt = 0;for(int i = 1; i <= n; i++){if(i >= v[cnt+1] && v[cnt+1] != 0) cnt++;if(i <= v[cnt])printf("%d ",v[cnt] - i);else if(abs(i - v[cnt]) < abs(v[cnt+1] - i))printf("%d ",i - v[cnt]);else if(abs(i - v[cnt]) >= abs(v[cnt+1] - i))printf("%d ",v[cnt+1]-i);}
}
这篇关于Codeforces 803 B. Distances to Zero(模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!