aacord’s memo

abcを中心にpythonで解いた問題のメモ、整理をしています。緑になった。

agc 031 A - Colorful Subsequence (python)

AGC に備えてAGCの緑 diff を8問くらい解いた。
印象としては気づくかどうか系が半分くらいで正答率も半分くらいだった。
数え上げ問題が多く、やたら Counter 使っている気がする。
一番大事なのは問題の題意をちゃんとと把握することだと感じた。
これはこの前の ABC の E と同じ数え上げの仕方をする問題だった。
a,b,c,d,e,f,g などととあって、 a は必ず選び、かつ (b,c), (d,e,f) が同じグループにならないような場合の数を求めるようなことを列の左から順番にやっていく。
この場合は ( b, c, ∅ ) から一つ、( d, e, f, ∅ ) から一つ、( g, ∅ ) から一つ選ぶので
3*4*2 通りとなる。

import sys
input = sys.stdin.readline
n = int(input())
s = input().rstrip()
mod = 10**9+7

from collections import Counter
c = Counter(s)
ans = 0
for i in s:
  chk = 1
  for j,v in c.items():
    if j == i:
      continue
    chk *= v+1
  ans += chk
  ans %= mod
  c.update({i:-1})
  
print(ans%mod)