CF1702B Polycarp Writes a Srting from Memory 题解

给定一个字符串,每天可以记忆三个字符,求书写出整个字符串的天数。

每次确定要记忆的三个字母,并向后寻找,若有非三个字母其中一个,则重新开启一天记忆三个字母。

#include<cstdio>
#include<iostream>
using namespace std;
int t;
string s;
int main(){
	scanf("%d",&t);
	while(t--){
		cin>>s;
		char a='0',b='0',c='0';//记忆三个字母
		bool f1=false,f2=false,f3=false;//三个字母是否有值
		int ans=1;//刚开始天数为1
		for(int i=0;i<s.size();i++){
			if(f1&&f2&&f3){
				if(s[i]!=a&&s[i]!=b&&s[i]!=c){//如果是未记忆,重新开启一轮
					f1=false;
					f2=false;
					f3=false;//恢复状态
					ans++;//天数+1
					a='0';
					b='0';
					c='0';
				}
				else continue;
			}
			if(!f1&&s[i]!=b&&s[i]!=c){//寻找需记忆的三个字母
				a=s[i];
				f1=true;
				continue;
			}
			if(!f2&&s[i]!=a&&s[i]!=c){
				b=s[i];
				f2=true;
				continue;
			}
			if(!f3&&s[i]!=a&&s[i]!=b){
				c=s[i];
				f3=true;
				continue;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}
posted @ 2022-07-13 13:27  Scorilon  阅读(89)  评论(0)    收藏  举报