Maxim and Biology
time limit per test 1 second
memory limit per test 256 megabytes
题目链接https://codeforces.com/contest/1151/problem/A
emmm,题目大意:给你一个字符串让你找到最小的步骤使得其中连续的一段为ACTG。
你每步只能将该大写字母往前或往后操作移一位ASCLL其中A与Z相连。。。
我们直接可以枚举每一位字符为模板的首字母,然后往后找3个与模板对应,接下来我们记录每个a[i]变到与模板对应的字母所需的最小步骤。。。
那么我们的最小步骤就为min(模板直接到a[i]的步骤,a[i]通过’Z’或’A’到模板的步骤)
以下是AC代码:
#include <bits/stdc++.h>
using namespace std;
const int mac=100;
char s[mac];
int to(char a,char b){
if (a>b) return 'Z'-a+b-'A'+1;
return a-'A'+'Z'-b+1;
}
int main(){
int n;
cin>>n;
scanf ("%s",s);
int ans1,ans2,ans3,ans4,minn=9999999;
for (int i=0; i<n-3; i++){
ans1=min(s[i]-'A','Z'-s[i]+1);
ans2=min(abs(s[i+1]-'C'),to(s[i+1],'C'));
ans3=min(abs(s[i+2]-'T'),to(s[i+2],'T'));
ans4=min(abs(s[i+3]-'G'),to(s[i+3],'G'));
minn=min(minn,ans1+ans2+ans3+ans4);
}
cout<<minn<<endl;
return 0;
}