【算法】 贡献法(附蓝桥杯真题) 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)


第十一届蓝桥杯省赛 C++A组真题

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
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢

你可能感兴趣的:(算法,蓝桥杯,python)