社区讨论

95pts求调

P9183 [USACO23OPEN] FEB B参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjdlaek
此快照首次捕获于
2025/11/04 00:49
4 个月前
此快照最后确认于
2025/11/04 00:49
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>

using namespace std;
#define int long long

int k;
string s;
const int N = 2e5 + 10;
int ans[N];

signed main(){
	cin >> k;
	cin >> s;
	s = " " + s;
	int sum1 = 0;
	int sum2 = 0;
	for (int i = 2; i <= k; i++){
		if (s[i] == 'E' && s[i - 1] == 'E') sum1++;
		if (s[i] == 'B' && s[i - 1] == 'B') sum2++;
	}
	int minn = sum1 + sum2;
	int maxn = sum1 + sum2;
	int sum = 1;
	for (int i = 1; i <= k; i++){
		if (s[i] == 'F'){
			if (s[i] == s[i + 1]){
				sum++;
				continue;
			}
			else{
				int x = i - sum;
				int y = i + 1;
				if (x == 0 || y == k + 1){
					maxn += sum;
					continue;
				}
				if (s[x] == s[y]){
					if (sum % 2 == 1) maxn += sum + 1;
					else{
						minn++;
						maxn += sum + 1;
					}
				}
				else{
					if (sum % 2 == 1){
						minn++;
						maxn += sum;
					}
					else maxn += sum;
				}
				sum = 1;
			}			
		}
	}
	if (s[1] == 'F' || s[k] == 'F'){
		cout << maxn - minn + 1 << "\n"; 
		for (int i = minn; i <= maxn; i++)
			cout << i << "\n";
		return 0;
	}
	cout << (maxn - minn) / 2 + 1 << "\n";
	for (int i = minn; i <= maxn; i += 2)
		cout << i << "\n";
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...