ref
pkusc 快到了,做点 thusc 的题涨涨 rp……

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
int n, k, ch[6000005][10], cnt, len, f[6000005], ans;
char ss[6000005];
vector<int> vec[6000005];
int main(){
	cin>>n;
	for(int j=1; j<=n; j++){
		scanf("%d %s", &k, ss);
		len = strlen(ss);
		if(k==1){
			int u=0;
			for(int i=0; i<len; i++){
				int c=ss[i]-'a';
				if(!ch[u][c])	ch[u][c] = ++cnt;
				u = ch[u][c];
				f[u]++;
				if(f[u]>vec[u].size())	vec[u].push_back(j);
			}
		}
		if(k==2){
			int u=0;
			for(int i=0; i<len; i++){
				int c=ss[i]-'a';
				u = ch[u][c];
				f[u]--;
			}
		}
		if(k==3){
			int a, b, c, u=0;
			if(ans<0)	ans *= -1;
			scanf("%d %d %d", &a, &b, &c);
			int x=((ll)a*ans%c+b)%c;
			ans = 0;
			for(int i=0; i<len; i++){
				c = ss[i] - 'a';
				if(!ch[u][c]){
					ans = -1;
					break;
				}
				u = ch[u][c];
			}
			if(ans!=-1 && x<vec[u].size())
				ans = vec[u][x];
			else	ans = -1;
			printf("%d\n", ans);
		}
	}
	return 0;
}

相关文章:

  • 2021-06-12
  • 2022-02-01
  • 2021-07-09
  • 2022-02-08
  • 2021-12-11
  • 2021-11-12
  • 2021-06-04
猜你喜欢
  • 2021-12-24
  • 2022-12-23
  • 2022-01-10
  • 2021-12-22
  • 2021-09-18
  • 2022-02-22
  • 2021-11-02
相关资源
相似解决方案