题目描述不说了。
题解:
Trie+vector……
Trie存学生,vector存答案。
极为无脑但无脑到让人怀疑
代码:
#include<cmath> #include<vector> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 100050 #define M 6000050 int n,ans=0; char s[65]; struct Trie { int tot,siz[M],ch[M][12]; vector<int>v[M]; void insert(int k) { int len = strlen(s+1),u=0; for(int i=1;i<=len;i++) { siz[u]++; if(v[u].size()<siz[u])v[u].push_back(k); int c = s[i]-'a'+1; if(!ch[u][c])ch[u][c]=++tot; u=ch[u][c]; } siz[u]++; if(v[u].size()<siz[u])v[u].push_back(k); } void erase() { int len = strlen(s+1),u=0; for(int i=1;i<=len;i++) { siz[u]--; int c = s[i]-'a'+1; u=ch[u][c]; } siz[u]--; } int query(int k) { int len = strlen(s+1),u=0; for(int i=1;i<=len;i++) { int c = s[i]-'a'+1; u=ch[u][c]; } if(v[u].size()<=k)return -1; return v[u][k]; } }tr; int main() { scanf("%d",&n); for(int opt,a,b,c,i=1;i<=n;i++) { scanf("%d",&opt); if(opt==1) { scanf("%s",s+1); tr.insert(i); } if(opt==2) { scanf("%s",s+1); tr.erase(); } if(opt==3) { scanf("%s%d%d%d",s+1,&a,&b,&c); int tmp =(int)((1ll*a*abs(ans)+b)%c); printf("%d ",ans=tr.query(tmp)); } } return 0; }