社区讨论
救救我
P2353背单词参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mlh9k238
- 此快照首次捕获于
- 2026/02/11 08:00 上周
- 此快照最后确认于
- 2026/02/12 17:40 7 天前
CPP
#include<bits/stdc++.h>
//因为爱,所以坚持
using namespace std;
int n,m,q,p[11],l,r,sz[11],lst[11][1000001];
long long sum[1000001][11];
string s,t[11];
int main(){
// freopen("data.in","r",stdin);
// freopen("task.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cin>>m>>q;
cin>>s;
n = s.size();
s = " "+s;
for(int i = 1;i <= m;++i){
cin>>t[i];
sz[i] = t[i].size();
t[i] = " "+t[i];
p[i] = 0;
for(int j = 1;j < sz[i];++j){
while(p[i] && t[i][j+1] != t[i][p[i]+1]) p[i] = lst[i][p[i]];
if(t[i][j+1] == t[i][p[i]+1]) ++p[i];
lst[i][j+1] = p[i];
}
p[i] = 0;
}
for(int i = 1;i <= n;++i){
for(int j = 1;j <= m;++j){
while(p[j] && t[j][p[j]+1] != s[i]) p[j] = lst[j][p[j]];
if(t[j][p[j]+1] == s[i]) ++p[j];
if(p[j] == sz[j]){
sum[i][j]++;
p[j] = lst[j][p[j]];
}
}
}
for(int i = 1;i <= n;++i){
for(int j = 1;j <= m;++j) sum[i][j]+=sum[i-1][j];
}
while(q--){
cin>>l>>r;
long long ans = 0;
for(int i = 1;i <= m;++i) ans = (ans+sum[r][i]-sum[l+sz[i]-2][i]);
cout<<ans<<'\n';
}
return 0;
}
10pts WA
必关
必关
回复
共 1 条回复,欢迎继续交流。
正在加载回复...