【算法】 贡献法(附蓝桥杯真题) python
·
https://ac.nowcoder.com/acm/contest/104421/B
AC_code:
n = int(input())
a = list(map(int, input().split()))
ans = 0
for i in range(n):
ans += a[i] * (i + 1) * (n - i)
print(ans)
https://www.acwing.com/problem/content/4264/
AC_code:
n = int(input())
s = input()
sg, sh = 0, 0
l, r = [0] * n, [0] * n
for i in range(n):
if s[i] == 'H':
l[i] = sg
sg = 0
sh += 1
else:
l[i] = sh
sh = 0
sg += 1
sg, sh = 0, 0
for i in range(n - 1, -1, -1):
if s[i] == 'H':
r[i] = sh
sh = 0
sg += 1
else:
r[i] = sg
sg = 0
sh += 1
ans = 0
for i in range(n):
ans += l[i] * r[i] + max(r[i] - 1, 0) + max(l[i] - 1, 0)
print(ans)
https://www.acwing.com/problem/content/5157/
AC_code:
from collections import Counter
mod = 10 ** 9 + 7
n = int(input())
s = input()
cnt = Counter(s)
ans = 0
max_m = max(cnt.values())
for i in cnt.values():
if i == max_m:
ans += 1
res = pow(ans, n, mod)
print(res)
AC_code:
s = ' ' + input()
n = len(s) - 1
l = [0] * (n + 1)
r = [0] * (n + 1)
pre = [0] * 26
for i in range(1, n + 1):
c = ord(s[i]) - ord('a')
l[i] = pre[c]
pre[c] = i
suf = [n + 1] * 26
for i in range(n, 0, -1):
c = ord(s[i]) - ord('a')
r[i] = suf[c]
suf[c] = i
ans = 0
for i in range(1, n + 1):
ans += (i - l[i]) * (r[i] - i)
print(ans)
END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢
更多推荐
所有评论(0)