题目大意:
让你构造一个字符串,其中只包含ACGT四种元素,使得其p的值最大,p的值按照题干图示求得。
思路:
首先我们确定,要使得p的值尽可能的大 ,那么我们一定必须要让原字符串出现次数最多的字符出现次数最多。
那么:
①如果只有一种字符出现次数最多,例如:ACCCC,那么我们构造出来的串:CCCCC一定是分值最高的串。
②如果有多种字符出现次数最多且出现次数相同,那么我们对应N个位子随意分配这几种出现次数相同的字符即可,那么答案就是:
出现次数最多的字符^N。
Ac代码:
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define MOD 1000000007
#define ll __int64
ll vis[5];
ll cont[5];
char a[100006];
int main()
{
int n;
while(~scanf("%d",&n))
{
scanf("%s",a);
memset(cont,0,sizeof(cont));
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
if(a[i]=='A')vis[0]++;
if(a[i]=='C')vis[1]++;
if(a[i]=='T')vis[2]++;
if(a[i]=='G')vis[3]++;
}
for(int i=0;i<4;i++)
{
if(vis[i]==0)continue;
for(int j=0;j<4;j++)
{
if(vis[i]==vis[j])cont[i]++;
}
}
ll maxn=0;
ll contz=0;
for(int i=0;i<4;i++)
{
if(vis[i]>maxn)
{
maxn=vis[i];
contz=cont[i];
}
}
ll output=1;
for(int i=0;i<n;i++)
{
output*=contz;
output%=MOD;
}
printf("%I64d\n",output);
}
}