求证明其正确性
查看原帖
求证明其正确性
817681
HZHDCM楼主2024/8/4 17:40

rt,赛时猜了一个贪心,就是直接从第一个往后扫并保存当前字串,如果与上一个字串不相同就ans++

#include <bits/stdc++.h>
using namespace std;
int T, n, cnt, ans, cnt1;
string s, ss, sss;
bool check(string &s1, string &s2, int len2, int len1) {
//	int len1=s1.size();
	if (len1 != len2)return true;
	else if (len1 == len2) {
//		cout<<114154<<endl;
		for (int i = 0; i < len1; i++) {
//			cout<<s1[i]<<" "<<s2[i]<<endl;
			if (s1[i] != s2[i])return true;
		}
		return false;
	}
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
	cout.tie(0);
	cin >> T;
	while (T--) {
		cin >> n;
		cin >> s;
//		bool flag=0;
////		ss.clear();
////		sss.clear();
		cnt = 0;
		ans = 0;
		cnt1 = 0;
//		for(int i=0;i<n-1;i++){
//			if(s[i]==s[i+1])flag=1;
//		}
//		if(!flag){
//			cout<<n<<endl;
//			continue;
//		}
		for (int i = 0; i < n; i++) {
			sss[cnt++] = s[i];
//			cout<<cnt<<" "<<cnt1<<endl<<endl;
//			for(int i=0;i<cnt;i++)cout<<sss[i];
//			cout<<endl;
//			for(int i=0;i<cnt1;i++)cout<<ss[i];
//			cout<<endl;
			if (check(sss, ss, cnt, cnt1)) {
				ans++;
//				cout<<cnt<<endl<<endl;
				for (int j = 0; j < cnt; j++)ss[j] = sss[j];
//				cnt=sss.size();
				cnt1 = cnt;
				cnt = 0;
			}
		}
		cout << ans << endl;
	}
	return 0;
}

code:

2024/8/4 17:40
加载中...