C-Good String(Round 92 div 2列挙)

5511 ワード

C - Good String
題意:0-9のみを含む文字列を与え、残りのサブシーケンスがgoodである場合、t 2 t 3...t n−1 t n t 1 t_2 t_3\dots t_{n - 1} t_n t_1 t 2 t 3…tn−1 tn t 1およびt n t 1 t 2 t 3…t n−1 t_n t_1 t_2 t_3\dots t_{n−1}tn t 1 t 2 t 3...tn−1は同じである.考え方:2つの異なる数のループが現れるか、あるいは数字が同じであるかの2つの状況がgoodの条件を満たすことを証明することができるので、直接2つの数字のループを列挙して、最も長いサブシーケンスを選択すればいい.長さの判断に注意する.
Code:
#include
using namespace std;

int main()
{
	IO;
	int T; cin>>T;
	while(T--){
		string s;
		cin>>s;
		int n = s.size();
		int ans=0;
		for(int i=0;i<=9;i++){
			for(int j=0;j<=9;j++){
				int num=0,flag=1;
				for(int k=0;k<n;k++){
					if(s[k]-'0'==(flag?i:j)) num++,flag^=1;
				}
				if(num%2==1&&i!=j) num--;	// i!=j ,num     
				ans = max(ans,num);
			}
		}
		cout<<n-ans<<"
"
; } return 0; }