CF803B Distances to Zero 题解

Content

有一个长度为 \(n\) 的序列 \(a_1,a_2,a_3,...,a_n\),求每个数与它最近的 \(0\) 的距离(\(0\) 的距离为 \(0\))。

数据范围:\(1\leqslant n\leqslant 2\times 10^5,-10^9\leqslant a_i\leqslant 10^9\)

Solution

距离的方向要么往左,要么往右,所以我们先往右遍历,再往左遍历,一边再更新 \(0\) 出现的位置和位置 \(i\) 到最近的 \(0\) 的距离。

Code

int n, a[200007], ans[200007], tmp;

int main() {
	memset(ans, 0x3f, sizeof(ans));
	getint(n);
	_for(i, 1, n)	getint(a[i]);
	_for(i, 1, n) {
		if(!a[i])	ans[i] = 0, tmp = i;
		else if(tmp)	ans[i] = min(ans[i], i - tmp);
	}
	int flag = 0;
	_rep(i, n, 1) {
		if(!a[i])	ans[i] = 0, tmp = i, flag = 1;
		else if(flag)	ans[i] = min(ans[i], tmp - i);
	}
	_for(i, 1, n)	writeint(ans[i]), putchar(' ');
	return 0;
}
posted @ 2021-12-21 20:05  Eason_AC  阅读(36)  评论(0)    收藏  举报