题解

在trie树上开vector记录一下这个前缀出现次数第一次达到某个值的下标,以及记录一下现在这个前缀有多少个

为什么thusc有那么水的题……是为了防我这种cai ji爆零么= =

代码

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
//#define ivorysi
#define pb push_back
#define eps 1e-12
#define space putchar(' ')
#define enter putchar('\n')
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define mo 974711
using namespace std;
typedef long long int64;
typedef double db;
struct node {
vector<int> v;
int cnt;
int nxt[10];
node() {cnt = 0;v.clear();memset(nxt,0,sizeof(nxt));}
}tr[6000005];
int rt = 1,nodecnt = 1,Q;
char s[65];
void Insert(int id,char *str,int on) {
int p = 1,L = strlen(str + 1);
for(int i = 1 ; i <= L ; ++i) {
if(!tr[p].nxt[str[i] - 'a']) {
tr[p].nxt[str[i] - 'a'] = ++nodecnt;
}
p = tr[p].nxt[str[i] - 'a'];
tr[p].cnt += on;
if(tr[p].cnt > tr[p].v.size()) tr[p].v.pb(id);
}
}
int Query(char *str,int x) {
int p = 1,L = strlen(str + 1);
for(int i = 1 ; i <= L ; ++i) {
if(!tr[p].nxt[str[i] - 'a']) return -1;
p = tr[p].nxt[str[i] - 'a'];
}
if(tr[p].v.size() - 1 < x) return -1;
return tr[p].v[x];
}
void Solve() {
scanf("%d",&Q);
int K,ans = 0,a,b,c;
for(int i = 1 ; i <= Q ; ++i) {
scanf("%d",&K);scanf("%s",s + 1);
if(K == 1) Insert(i,s,1);
else if(K == 2) Insert(i,s,-1);
else {
scanf("%d%d%d",&a,&b,&c);
int t = (1LL * abs(ans) * a + b) % c;
printf("%d\n",ans = Query(s,t));
}
}
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

最新文章

  1. 测试...外部指针访问private
  2. Centos下安装jdk
  3. petset翻译
  4. 关于配置Spring框架的多个propertyConfigurer的问题
  5. Centos 下安装 文泉驿 字体 Odoo
  6. JS表单学习笔记(思维导图)
  7. Redis系列文章导读
  8. linux环境ubuntu: pushd: not found
  9. Mod in math
  10. Nio学习4——EchoServer在IO,NIO,NIO.2中的实现
  11. 一些android开发实用性网站记录
  12. struts2框架学习笔记6:拦截器
  13. (转)EOSIO开发(一)使用Docker构建本地环境
  14. shell-url-decode
  15. openCV基础知识
  16. 嵌入式telnet的安装
  17. 区间DP(总结)
  18. 网格系统-bootStrap4常用CSS笔记
  19. hadoop中的序列化与Writable接口
  20. Winform GDI+

热门文章

  1. 关于JSON的解析方式
  2. Javascript 浮点计算问题分析与解决
  3. Spring 手动提交事务
  4. Visual Studio Code 教程之————入门篇
  5. 如何给自己的PHP项目制作安装程序
  6. 20155217 2016-2017-2 《Java程序设计》第8周学习总结
  7. 【leetcode 简单】 第八十一题 4的幂
  8. Android Framebuffer介绍及使用【转】
  9. sicily 1231. The Embarrassed Cryptography
  10. 002_IO磁盘深入理解