社区讨论
大佬求调
P4052[JSOI2007] 文本生成器参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi9qoy8m
- 此快照首次捕获于
- 2025/11/22 11:38 3 个月前
- 此快照最后确认于
- 2025/11/22 13:09 3 个月前
只对了2,3,4这三个点
CPP#include<bits/stdc++.h>
using namespace std;
int n, m, dp[105][6005], sum;
string s, t;
struct AC{
int vis[6005], x[6005], a[6005][26], cnt=0;
void add(string s, int pos=0){
for(auto i:s){
if(!a[pos][i-'A']) a[pos][i-'A']=++cnt;
pos=a[pos][i-'A'];
}
vis[pos]=1;
}
void bfs(){
queue<int> q;
for(int i=0;i<26;i++) if(a[0][i]) q.push(a[0][i]);
while(q.size()){
auto t=q.front();
q.pop();
for(int i=0;i<26;i++){
if(a[t][i]){
x[a[t][i]]=a[x[t]][i];
vis[a[t][i]]|=vis[x[a[t][i]]];
q.push(a[t][i]);
}
else a[t][i]=a[x[t]][i];
}
}
}
}ac;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s;
ac.add(s);
}
ac.bfs();
dp[0][0]=1;
for(int i=0;i<m;i++){
for(int j=0;j<=ac.cnt;j++){
if(ac.vis[j]) continue;
for(int k=0;k<26;k++){
if(ac.vis[ac.a[j][k]]) continue;
dp[i+1][ac.a[j][k]]=(dp[i+1][ac.a[j][k]]+dp[i][j])%10007;
}
}
}
for(int i=0;i<=ac.cnt;i++) sum=(sum+dp[m][i])%10007;
cout<<(int(pow(26, m))%10007-sum%10007+10007)%10007;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...