社区讨论

7分求助

P11451[USACO24DEC] It's Mooin' Time B参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@m57vjzg5
此快照首次捕获于
2024/12/28 15:43
去年
此快照最后确认于
2025/11/04 12:15
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int sum[4000007];
bool sk[4000007];
int n,m,ans;
char s[100005],p;
int main() {
	cin>>n>>m;
	scanf("%s",s+1);
	for(int i=1; i<=n; i++) {
		s[i]-='a';
	}
	for(int i=1; i<=n-2; i++) {
		if(s[i+1]==s[i+2]&&s[i+1]!=s[i]) {
			sum[s[i]*10000+s[i+1]*100+s[i+2]]++;
		}
	}
	for(int i=1; i<=400005; i++) {
		if(sum[i]>=m) {
			sk[i]=1;
		}
	}
	for(int i=1; i<=n; i++) {
		p=s[i];
		for(int j=0; j<26; j++) {
			s[i]=j;
			int a=sum[s[i-2]*10000+s[i-1]*100+s[i]],b=sum[s[i-1]*10000+s[i]*100+s[i+1]],c=sum[s[i]*10000+s[i+1]*100+s[i+2]];
			if(s[i-1]==p&&p!=s[i-2] && !(s[i-1]==s[i]&&s[i]!=s[i-2])) {
				sum[s[i-2]*10000+s[i-1]*100+s[i]]--;
			}else if(s[i-1]==s[i]&&s[i]!=s[i-2] && !(s[i-1]==p&&p!=s[i-2])) {
				sum[s[i-2]*10000+s[i-1]*100+s[i]]++;
			}
			if(p==s[i+1]&&p!=s[i-1] && !(s[i]==s[i+1]&&s[i]!=s[i-1])) {
				sum[s[i-1]*10000+s[i]*100+s[i+1]]--;
			}else if(s[i]==s[i+1]&&s[i+1]!=s[i-1] && !(p==s[i+1]&&p!=s[i-1])) {
				sum[s[i-1]*10000+s[i]*100+s[i+1]]++;
			}
			if(s[i+1]==s[i+2]&&s[i+2]!=p && !(s[i+1]==s[i+2]&&s[i+2]!=s[i])) {
				sum[s[i]*10000+s[i+1]*100+s[i+2]]--;
			}else if(s[i+1]==s[i+2]&&s[i+2]!=s[i] && !(s[i+1]==s[i+2]&&s[i+2]!=p)) {
				sum[s[i]*10000+s[i+1]*100+s[i+2]]++;
			}
			if(sum[s[i-2]*10000+s[i-1]*100+s[i]]>=m)sk[s[i-2]*10000+s[i-1]*100+s[i]]=1;
			if(sum[s[i-1]*10000+s[i]*100+s[i+1]]>=m)sk[s[i-1]*10000+s[i]*100+s[i+1]]=1;
			if(sum[s[i]*10000+s[i+1]*100+s[i+2]]>=m)sk[s[i]*10000+s[i+1]*100+s[i+2]]=1;
			sum[s[i-2]*10000+s[i-1]*100+s[i]]=a;
			sum[s[i-1]*10000+s[i]*100+s[i+1]]=b;
			sum[s[i]*10000+s[i+1]*100+s[i+2]]=c;
		}
		s[i]=p;
	}
	for(int i=1; i<=400005; i++) {
		if(sk[i]==1) {
			ans++;
		}
	}
	cout<<ans<<"\n";
	for(int i=1; i<=400005; i++) {
		if(sk[i]==1) {
			cout<<char(i/10000+'a')<<char(i/100%100+'a')<<char(i%100+'a')<<"\n";
		}
	}
	return 0;
}

回复

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

正在加载回复...