UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十四场

传送门

A: Colorful Subsequence

•题意

给一个长为n的小写字母序列,从中选出字母组成子序列

问最多能组成多少种每个字母都不相同的子序列

(不同位置的相同字母也算是不同的一种)

•思路

对于每种字母有选与不选两种情况,

①如果选的话,j假设这种字母有xi种,那就有xi种选法

②如果不选的话,有不选这一种方法

那总和起来就有(xi+1)中方法

设num[i]为每种字母的个数

对于所有的字母,总的种类数就是

但是要注意全不选的这种情况,对于上述种类数-1

•代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const long long mod=1e9+7;
char s[100005];
int Count[27];
int main()
{
    int n;
    cin>>n;
    ll ans=1;
    for(int i=0;i<n;i++)
    {
        cin>>s[i];
        Count[s[i]-'a']++;
    }
    for(int i=0;i<26;i++)
        ans=(ans%mod*(Count[i]+1)%mod)%mod;
    cout<<ans-1<<endl;
}
View Code

猜你喜欢

转载自www.cnblogs.com/MMMinoz/p/11185427.html