草体にぼ日記

だらだらと

AGC031A Colorful Subsequence]

AGC031A Colorful Subsequence

提出AC

int main()
{
    cout <<setprecision(10);
    ll n ;
    string s;
    cin >> n >> s;
    int num[26];
    rep(i,26) num[i] = 0;
    rep(i,26){
        char c = 'a' + i ;
        rep(j,s.size()){
            if(s[j] == c){
                num[i] ++;
            }
        }
    }
 
    ll ans = 1;
    rep(i,26){
        if(num[i] != 0){
            ans *= num[i]+1 ;
            ans %= mod;
        }
    }
    ans --;
    cout << ans << endl;
}

難し目の問題

解法

a ~ z

までの文字に対して、それぞれ何文字ずつあるか数える

各アルファベットに対して、1個以上存在するのであれば、

そのアルファベットを取らない、1個目を取る、2個目を取る…(存在するだけ数N番目を取る)

のn+1の選択肢がある

正直あんまりよく分かっていない

ただ、与えられた文字列の中からどの文字を使うかだけ決めたら、使う文字に対して答えは+1しかされないので

どのような選び方があるかだけ考えればよいし、まあ。はあ。

で、

各アルファベットが存在するならその数+1をかけていって

最後に-1する

ちょっと元気がないから雑。許してね。