codeforces

链接:https://codeforces.com/contest/1083/problem/B
思路:按位统计,相当于看以这个前缀作为二进制数之间有多少个数,然后和k取一个最小值加入统计答案即可(因为如果大于k只能取k个,贪心取不同的前缀即可,否则二进制数只有那么多只能取数量个)。

代码:

1
2
3
4
5
6
7
8
9
n, k = map(int, input().split())
a = input()
b = input()
res = 0
ans = 0
for i in range(0, n):
res = min(res * 2 + (b[i] == 'b') - (a[i] == 'b'), k)
ans += min(res + 1, k)
print(ans)