A. Maxim and Biology---简单思维--Codeforces Round #553 (Div. 2)

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值