冬のトレーニングトレーニングゲーム1.17 C

タイトル効果が
Nの長さを有する(1 <= N <= 2×10 ^ 5)が3つあり、文字だけを含む"R"、 "B"、 "G" 列s。
あなたは他の二つの文字に文字のいずれかを変更することができます。
任意のI、J、もしS [i]は= S [J ]、 その後、要件| IJ | 3 = 0 MOD。
最小値は変更の数を必要としました。
問題解決のためのアイデア
同定された最初の3文字が、その後、手紙の裏にも決定。
限り決定(6の合計)から3つの文字のシーケンスとして、各シーケンスは、最小値を再計算することができます。
コード

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int main()
{
	int len;
	string st;
	cin>>len;
	cin>>st;
	int ans=999999999;
	int w=0;
	string s[]={"GRB","GBR","BRG","BGR","RGB","RBG"};
    for (int k=0;k<6;k++)
    {
      int p=0,ti=0;
	  for (int i=0;i<len;i++)
	    {
	    	if (s[k][p]!=st[i]) ti++;
	    	p=(p+1)%3;
	    }
	  if (ti<ans)
	  {
	  	ans=ti;
	  	w=k;
	  }  
	}
	cout<<ans<<endl;
	for (int i=1;i<=len/3;i++)
	  cout<<s[w];
	for (int i=0;i<len%3;i++)
	  cout<<s[w][i];  
}
公開された39元の記事 ウォンの賞賛0 ビュー556

おすすめ

転載: blog.csdn.net/weixin_45723759/article/details/104064345