Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38849 22fhq 【S】T4 C++ 解答错误 15 275 MS 237164 KB 2559 2025-11-10 17:14:18

Tests(3/20):


#include<bits/stdc++.h> #define int long long using namespace std; inline void read(int &x) { x = 0; int s = getchar(), f = 1; for (; s < '0' || '9' < s; s = getchar()) f = s == '-' ? -f : f; for (; '0' <= s && s <= '9'; s = getchar()) x = x * 10 + (s ^ '0'); x*=f; } #define read2(a,b) read(a),read(b) #define read3(a,b,c) read(a),read(b),read(c) const int mod=(1ll<<32); int op,n,m,a[500005],b[500005]; string s,t[500005]; int ch[500005][26],fail[500005],tot,id[500005],deg[500005]; int insert(string st){ int p=0; for(char c:st){ if(!ch[p][c-'a'])ch[p][c-'a']=++tot; p=ch[p][c-'a']; } return p; } void build(){ queue<int>q; for(int i=0;i<26;i++){ if(!ch[0][i])continue; q.push(ch[0][i]); deg[0]++; } while(!q.empty()){ int p=q.front(); q.pop(); for(int i=0;i<26;i++){ if(ch[p][i]){ fail[ch[p][i]]=ch[fail[p]][i],deg[ch[fail[p]][i]]++; q.push(ch[p][i]); } else ch[p][i]=ch[fail[p]][i]; } } } namespace subA{ int cnt[500005]; bool vis[500005]; void topo(){ queue<int>q; for(int i=0;i<=tot;i++)if(!deg[i])q.push(i); while(!q.empty()){ int p=q.front();q.pop(); if(vis[p])continue; vis[p]=1; deg[fail[p]]--; cnt[fail[p]]+=cnt[p]; if(!deg[fail[p]])q.push(fail[p]); } } void slv(){ int p=0; for(int i=0;i<n;i++){ char c=s[i]; p=ch[p][c-'a']; cnt[p]+=a[i+1]; } topo(); int ans=0,lst=0; for(int i=1;i<=m;i++)ans+=cnt[id[i]]*b[i],ans%=mod; int q;read(q); while(q--){ int ope,x,y; read3(ope,x,y); x^=lst,y^=lst; // cout<<x<<" "<<y<<endl; if(ope==1){ ans+=cnt[id[x]]*y; ans%=mod; } else{ ans+=mod; ans%=mod; printf("%lld\n",ans); lst=ans; } } } } void slv(){ read3(op,n,m); cin>>s; for(int i=1;i<=n;i++)read(a[i]); for(int i=1;i<=m;i++){ cin>>t[i]; read(b[i]); id[i]=insert(t[i]); } build(); if(op){ subA::slv(); return; } } signed main(){ slv(); return 0; }


测评信息: