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;
}