ソート - コンストラクタタイトル

ポータル:ソート

問題の意味は:「A」、「T」、所与の期間含ま 「G」、 T」、「A」構築配列「C」、左及び文字各文字は、各交換の消費を生じる、位置を交換することができるが、 「」G「」C ' 、それぞれ連続配列、最小消費の値。
分析:まず列挙24可能、すなわち「A」、「T」、 「G」、「C」 オーダーの、あらゆる可能な消費統計。消費需要のそれぞれの場合について、同様の数の必要性は、逆の順序を求めていると考えます。ATGC需要シナリオ、元の配列のトラバーサルではなく、文字の横に前のクエリ配列と優先順位(すなわち、最高優先順位A、T、G、降順でC)文字の数が多いではありません。これらの文字は、それがバックアップする場合でも、その後、それをバックに統計を加えたこれらの文字の数、これらの文字を移動する必要があります。クエリは、接頭辞配列を使用することができます

コード:

#include<bits/stdc++.h>
using namespace std;
char s[200010];
map<char,int> mmp;
int flag[2000010];
int main(){
	scanf("%s",s+1);
	int n=strlen(s+1);
	int a[]={0,1,2,3,4};
	long long Min=LONG_LONG_MAX;
	while(next_permutation(a+1,a+4+1)){
		memset(flag,0,sizeof flag);
		mmp['A']=a[1],mmp['T']=a[2],mmp['G']=a[3],mmp['C']=a[4];
		long long ans=0;
		for(int i=1;i<=n;++i){
			for(int j=mmp[s[i]]+1;j<=4;++j){
				ans+=flag[j];
			}
			flag[mmp[s[i]]]++;
		}
		Min=min(ans,Min);
	}
	cout<<Min<<endl;
	return 0;
}
公開された96元の記事 ウォン称賛11 ビュー2266

おすすめ

転載: blog.csdn.net/weixin_43769146/article/details/103962576