社区讨论
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 条回复,欢迎继续交流。
正在加载回复...