社区讨论

救救我

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 条回复,欢迎继续交流。

正在加载回复...