看运气QAQ
查看原帖
看运气QAQ
1358215
KevinMZ楼主2024/9/18 16:10
#include<bits/stdc++.h>
using namespace std;
string s;
string ans;
int _time, _time2, _time3;
bool ok(int first, int aaa, char c)
{
	int cnt, cnt2;
	for(int i = first; i <= aaa; i++)
	{
		if(s[i] == ans[i]) cnt++;
		if(s[i] == c) cnt2++;
	}
	return cnt2 >= cnt;
}
bool ok2(int first, int aaa)
{
	int cnt, cnt2;
	for(int i = first; i <= aaa; i++)
	{
		if(s[i] == ans[i]) return false;
	}
	return true;
}
inline int last(char c, int start)
{
	for(int i = s.size() - 1; i >= 0; i--)
		if(s[i] == c && ans[i] != c && ok(start, i, c)) return i;
}
inline int last2(char c)
{
	for(int i = s.size() - 1; i >= 0; i--)
		if(s[i] == c && ans[i] != c) return i;
}
inline int last3(char c, int start)
{
	for(int i = s.size() - 1; i >= 0; i--)
		if(s[i] == c && ans[i] != c && ok2(start, i)) return i;
}
int main()
{
	cin >> s;
	for(int i = 0; i < s.size(); i++) ans += "~";
	for(int i = 0; i < s.size(); i++)
	{
		if(ans[i] != s[i])
		{
			_time++;
			int k = last(s[i], i);
//			cout << i << " " << k;
//			puts(""); 
			for(int j = i; j <= k; j++)
			{
				ans[j] = s[i];
			}
		}
	}
	for(int i = 0; i < s.size(); i++) ans[i] = '~';
	for(int i = 0; i < s.size(); i++)
	{
		if(ans[i] != s[i])
		{
			_time2++;
			int k = last2(s[i]);
//			cout << i << " " << k;
//			puts(""); 
			for(int j = i; j <= k; j++)
			{
				ans[j] = s[i];
			}
		}
	}
	for(int i = 0; i < s.size(); i++) ans[i] = '~';
	for(int i = 0; i < s.size(); i++)
	{
		if(ans[i] != s[i])
		{
			_time3++;
			int k = last3(s[i], i);
//			cout << i << " " << k;
//			puts(""); 
			for(int j = i; j <= k; j++)
			{
				ans[j] = s[i];
			}
		}
	}
	cout << min(_time, min(_time2, _time3));
	return 0;
}

30~60,概率论

2024/9/18 16:10
加载中...