世界上最富有的人想必大家都已经知道了,是garden,由于garden钱实在是太多了,他投了大量的钱给科学研究室,但是最近科学研究室发现了一些缺失的基因链,他们一时间不能马上恢复这个基因链,于是,garden打算重金悬赏能恢复这些基因链的勇士。 首先给出一条字符串,仅含有’A’,‘C’,‘G’,‘T’,’?’,5种字符,其中?代码缺失的基因,已知该基因为猛犸象基因,即基因链中,ACGT每一种核苷酸数量相等,现在要求大家能恢复其原来的基因链,如果答案存在多种情况,输出字典序最小的基因链。
输入格式:
第一行包含整数n(4≤n≤255) - 基因组的长度。
第二行包含长度为n的字符串编码的基因组。它由字符’A’,‘C’,‘G’,‘T’和’?'组成。
输出格式:
如果可以解码基因组,输出。如果有多个答案,输出字典序最小的基因链。如果不可能,输出-1
输入样例:
在这里给出一组输入。例如:
8
AG?C??CT
4
AGCT
6
????G?
1
2
3
4
5
6
输出样例:
在这里给出相应的输出。例如:
AGACGTCT
AGCT
-1
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=10010;
const int N=10;
int main(){
int n;
string str;
while(cin>>n>>str){
if(n%4){
printf("-1\n"); continue;
}
int k=n/4;
int cnt[127]={0};
for(int i=0;i<n;i++) cnt[str[i]]++;
int a=k-cnt['A'];// 1
int c=k-cnt['C'];// 0
int g=k-cnt['G'];// 1
int t=k-cnt['T'];// 1
int sum=a+c+g+t;
if(sum!=cnt['?']) {
printf("-1\n"); continue;
}
for(int i=0;i<n;i++){
if(str[i]!='?') {
cout<<str[i]; continue;
}
if(a) { a--; putchar('A');}
else if(c) { c--; putchar('C');}
else if(g) { g--; putchar('G');}
else if(t) { t--; putchar('T');}
}
puts("");
}
return 0;
}