题目链接:
http://codeforces.com/problemset/problem/747/B
题解:
题目大意:一个长度为n的字符串,其中只有’A’,’C’,’G’,’T’,’?’ 这五种不同的字符,前面的四种为基因的种类,剩下的?表示为未知的。问四种基因都出现并且出现的次数要求一样,问可不可能,可能的话,就直接输出补好的字符串,不行的话就输出”===” 。
直接暴力求解就行了。
代码:
#include <cmath>
#include <cstdio>
#include <map>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
const int maxn = 255+10;
int num[1000];
char s[maxn];
int n;
int main()
{
cin>>n;
scanf("%s",s);
int flag=0;
int temp=0;
if(n%4==0)
{
met(num,0);
for(int i=0;i<n;i++)
num[s[i]]++;
int ans=n/4;
int cnt1=0,cnt2=0,cnt3=0,cnt4 =0;
cnt1=ans-num['A'];
cnt2=ans-num['C'];
cnt3=ans-num['G'];
cnt4=ans-num['T'];
if(cnt1>=0&&cnt2>=0&&cnt3>=0&&cnt4>=0)
{
if(cnt1+cnt2+cnt3+cnt4==num['?'])
{
flag=1;
for(int i=0;i<n;i++)
{
if(s[i]=='?')
{
if(cnt1)
{
s[i]='A';
cnt1--;
}
else if(cnt2)
{
s[i]='C';
cnt2--;
}
else if(cnt3)
{
s[i]='G';
cnt3--;
}
else
{
s[i]='T';
cnt4--;
}
}
}
cout<<s<<endl;
}
}
}
if(!flag)
cout<<"==="<<endl;
}
本题打的比较烦,等以后有时间再把这代码优化下。。。。。。