AcWing 5154. 牛的基因学——大白话解析
原题链接
困难
作者:
z_AC
,
2024-03-11 08:24:23
,
所有人可见
,
阅读 65
/*
本题需要模拟一下样例的结果是怎么得出来的,经分析t中的每一个基因都会和
s中的每一个基因进行比对,所以说在构造t时,只需要将每一个基因都改为s中
出现次数最多的那个基因,而且t中的每一个基因都是独立的,如果s中有两个数量最多的
基因的话,那么t中的每一个基因都有两种选择 那么所有的构造情况就是2的n次方
那么实现的的时候可以先遍历s串中的出现次数最多的个数 然后计算即可。
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 100010,MOD = 1e9+7;
typedef long long LL;
int n;
char s[N];
int cnt[100];
int main() {
scanf("%d%s",&n,s);
int mx = 0,ct = 0;
for(int i = 0;i < n;i++) {
// 这里会将s[i] 的字符进行转换成数字
int t = ++ cnt[s[i]];
// 找到一个最大值并且记录最大值
if(t > mx) mx = t,ct = 1;
else if(t == mx) ct ++; // 找到最大值相同的个数
}
int res = 1;
for(int i = 0;i < n;i++) {
res = (LL) res * ct % MOD;
}
printf("%d\n",res);
return 0;
}