BZOJ 4896 Thu Summer Camp2016 补退选 Trie树
来源:互联网 发布:软件方案评审结论 编辑:程序博客网 时间:2024/06/11 05:56
心情不好跑来刷水题……
题目大意:给定一个字符串集,支持插入、删除、查询某个前缀的出现次数最早何时超过给定的值
开个Trie树维护字符串
直接每个节点开个vector记录一下超过
坑点:
1.超过是指大于
2.题目中的“输入中的所有字符串只会包含前
3.
#include <map>#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 100100using namespace std;int n,m,last_ans;struct Trie{ map<char,Trie*> son; int cnt,max_cnt; vector<int> ans; void* operator new(size_t) { static Trie mempool[M*60],*C=mempool; return C++; } Trie* Next(char c) { if(!son[c]) son[c]=new Trie; return son[c]; } Trie* Next(char c) const { return son.find(c)==son.end()?0x0:son.find(c)->second; } friend void Insert(Trie *p,char *s,int cnt) { while(1) { p->cnt+=cnt; if(p->cnt>p->max_cnt) { p->max_cnt=p->cnt; p->ans.push_back(m); } if(!*s) return ; p=p->Next(*s);++s; } } friend int Query(const Trie *p,char *s,int limit) { while(*s) { if(!p->Next(*s)) return -1; p=p->Next(*s);++s; } return p->max_cnt>limit?p->ans[limit]:-1; }}*root=new Trie;int main(){ static char s[66]; cin>>n; for(int i=1,k,a,b,c;i<=n;i++) { m=i; scanf("%d%s",&k,s); if(k==1) Insert(root,s,1); else if(k==2) Insert(root,s,-1); else { scanf("%d%d%d",&a,&b,&c); printf("%d\n",last_ans=Query(root,s,((long long)a*abs(last_ans)+b)%c)); } } return 0;}
阅读全文
0 0
- BZOJ 4896 Thu Summer Camp2016 补退选 Trie树
- [Trie]BZOJ 4896——[Thu Summer Camp2016]补退选
- bzoj 4896: [Thu Summer Camp2016]补退选 字典树+vector
- [Trie] BZOJ4896: [Thu Summer Camp2016]补退选
- 4896: [Thu Summer Camp2016]补退选
- 【Trie+vector】BZOJ4896(Thu Summer Camp2016)[补退选]题解
- BZOJ4896 [Thu Summer Camp2016]补退选
- [DP] BZOJ 4897 [Thu Summer Camp2016]成绩单
- BZOJ4897 [Thu Summer Camp2016]成绩单
- 4897: [Thu Summer Camp2016]成绩单
- BZOJ4897: [Thu Summer Camp2016]成绩单 DP
- 【BZOJ 4103】[Thu Summer Camp 2015]异或运算 可持久化trie树
- BZOJ 4103 [Thu Summer Camp 2015]异或运算 可持久化Trie
- bzoj 4103: [Thu Summer Camp 2015]异或运算 可持久化trie
- BZOJ 4104 [Thu Summer Camp 2015]解密运算
- bzoj 4104: [Thu Summer Camp 2015]解密运算
- bzoj 4103: [Thu Summer Camp 2015]异或运算
- BZOJ 4103: [Thu Summer Camp 2015]异或运算
- 合唱队--最长递增(减)子序列长度
- 如何在linux桌面上创建webstorm快捷方式
- 用指针和数组实现字符串复制
- 九度oj 题目1007:奥运排序问题
- 计算有限5位数
- BZOJ 4896 Thu Summer Camp2016 补退选 Trie树
- Python-sklearn机器学习的第一个样例(5)
- SpringMVC学习记录(四)--文件上传与下载
- 【等你来战】京东金融-中信证券杯量化策略大赛第6期!
- poj1321之DFS
- |BZOJ 4034|树链剖分|线段树|[HAOI2015]树上操作
- MPI Matrix Multiplication
- 关于Android studio 中无法打开ddms的data目录
- 第六次上级作业