社区讨论
20pts 求条,悬1/2关
P4407[JSOI2009] 电子字典参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mlh9kd79
- 此快照首次捕获于
- 2026/02/11 08:00 上周
- 此快照最后确认于
- 2026/02/12 15:10 7 天前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=2e5+10;
int ch[N][26];
int cnt;
int sum[N];
string s;
bool check(){
int x=0;
for(int j=0;j<s.size();j++){
if(ch[x][s[j]-'a']==0) return false;
x=ch[x][s[j]-'a'];
}
return sum[x]>0;
}
int ans;
void dfs(int x,int i,bool flag){
if(i==s.size()){
if(sum[x]>0) ans++;
return;
}
for(int j=0;j<26;j++){
if(ch[x][j]==0) continue;
if(flag){
if(j==s[i]-'a') dfs(ch[x][j],i+1,flag);
}else{
if(j==s[i]-'a') dfs(ch[x][j],i+1,flag);
dfs(ch[x][j],i,1);//添加
if(i+1<s.size()&&j==s[i+1]-'a') dfs(ch[x][j],i+2,1);//删除
if(j!=s[i]-'a') dfs(ch[x][j],i+1,1);//替换
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
string s;
cin>>s;
int x=0;
for(int j=0;j<s.size();j++){
if(ch[x][s[j]-'a']==0) ch[x][s[j]-'a']=++cnt;
x=ch[x][s[j]-'a'];
}
sum[x]++;
}
for(int i=1;i<=m;i++){
cin>>s;
if(check()){
cout<<"-1\n";
}else{
ans=0;
dfs(0,0,0);
cout<<ans<<"\n";
}
}
return 0;
}
调不动了,只过了 #2 和 #9
回复
共 2 条回复,欢迎继续交流。
正在加载回复...