CF1139A Even Substrings 题解

Content

有一个长度为 \(n\) 的数字串 \(s\),试求出代表偶数的子串个数。

数据范围:\(1\leqslant n\leqslant 65000\)\(s\) 仅包含数字 \(1\sim9\)

Solution

众所周知,看一个数是否是偶数,只要看其最后一位是否能被 \(2\) 整除即可。所以,我们遍历一遍数字串,一旦碰见了能被 \(2\) 整除的数,那么假设其位置为 \(i\),那么显然,答案要增加 \(i\),因为这个数是偶数,那么前面连续的数组合起来的话也都是偶数。比如 \(1234\),我们扫到了 \(2\) 是偶数,那么 \(12,2\) 都是偶数,扫到了 \(4\) 是偶数,那么 \(1234,234,34,4\) 都是偶数。

那么这样一来,代码就很简单了。

Code

int n, x, ans;

int main() {
	getint(n);
	_for(i, 1, n) {scanf("%1d", &x); if(!(x % 2)) ans += i;}
	writeint(ans);
	return 0;
}
posted @ 2021-12-17 14:28  Eason_AC  阅读(28)  评论(0)    收藏  举报