FJUTOJ 校赛H 你明明自己也生病了,却还是要陪着我 (字典树)
来源:互联网 发布:淘宝快捷方式 编辑:程序博客网 时间:2024/04/29 11:45
题意:
题目给出两个操作,1是插入字符串,2是询问这个字符串是否是之前插入的字符串前后缀的组合或者这个字符串本身就是之前插入的字符串的前缀或后缀。
题解:
直接字典树搞,弄两个字典树,一个存前缀,一个存后缀,然后查询时去两个字典树中查找,如果两个搜到的两个位置相加>=len,那么是可行的。
#include <iostream>#include<stdio.h>#include<string.h>#include<string>#include<map>#include<vector>#include<set>#include<algorithm>#include<ctype.h>#define B(x) (1<<(x))typedef long long ll;typedef unsigned long long ull;using namespace std;void cmax(int& a,int b){ if(b>a)a=b; }void cmin(int& a,int b){ if(b<a)a=b; }void cmax(ll& a,ll b){ if(b>a)a=b; }void cmin(ll& a,ll b){ if(b<a)a=b; }void add(int& a,int b,int mod){ a=(a+b)%mod; }void add(ll& a,ll b,ll mod){ a=(a+b)%mod; }const int maxn=50005;const int maxm=105;const int SIZE=1000005;struct TRIE{ int next[SIZE][26]; int cnt,root; int newNode(){ for(int i=0;i<26;i++) next[cnt][i]=-1; cnt++; return cnt-1; } void Init(){ cnt=0; root=newNode(); } void Insert(char buff[]){ int now=root; for(int i=0;buff[i];i++){ int k=buff[i]-'a'; if(next[now][k]==-1) next[now][k]=newNode(); now=next[now][k]; } } int Search(char buff[]){ int now=root; int i; for(i=0;buff[i];i++){ int k=buff[i]-'a'; if(next[now][k]==-1) return i; now=next[now][k]; } return i; }}trie1,trie2;void up_down(char T[],char S[],int len){ for(int i=0;i<len;i++) T[i]=S[len-i-1]; T[len]='\0';}char str[maxn],s[maxn];int main(){ //freopen("E:\\read.txt","r",stdin); int n,op,len,pos1,pos2; while(scanf("%d",&n)!=EOF){ trie1.Init(); trie2.Init(); while(n--){ scanf("%d%s",&op,str); if(op==1){ trie1.Insert(str); len=strlen(str); up_down(s,str,len); trie2.Insert(s); }else if(op==2){ pos1=trie1.Search(str); len=strlen(str); up_down(s,str,len); pos2=trie2.Search(s); if(pos1+pos2>=len) puts("YES"); else puts("NO"); } } } return 0;}/**81 abc2 abcabc1 qwer2 ar2 qwer2 abcqwer2 qb2 we31 abc2 abab2 abba111 aaac1 bbbc1 aabbb2 aaaabbb2 aaaaabbbb2 aaac2 bbbc2 aabbb2 caaa2 cbbb2 bbbaa*/
0 0
- FJUTOJ 校赛H 你明明自己也生病了,却还是要陪着我 (字典树)
- fjut 1107 第八集 你明明自己也生病了,却还是要陪着我(字典树)
- fjut 1107 第八集 你明明自己也生病了,却还是要陪着我(字典树)
- 我要你陪着我
- 我生病了,我的小乌龟也生病了
- 有你陪着我,就够了
- 她生病了,可我却不能陪伴在身边
- 你明明是我师父,却偏要做我女朋友
- 为何你明明动了情,却又不靠近
- 黄陈晨,你可以陪着我么
- MYSQL中明明已经赋给了SUPER权限却还是提示SUPER privilege的问题
- 我的网站生病了
- 你的背叛,让我自己也背叛了自己:伤感日志
- 你的背叛,让我自己也背叛了自己:伤感日志
- 我要生病啦!!
- 喝醉了才知道自己最爱谁,生病了才知道谁最爱你。。。
- 有多少人,明明分手了,却还爱着。有多少人,明明还爱着,却说放下了,有多少人,明明难过,却还微笑着说我很好。
- 当我给了你体谅也给了自己远方:伤感日志
- C语言中strlen()和sizeof()的区别
- POJ3009 Curling 2.0 DFS
- POJ1007--DNA Sorting
- CImage类的介绍与使用
- 面向对象C++中重载、重写(覆盖)、隐藏的区别
- FJUTOJ 校赛H 你明明自己也生病了,却还是要陪着我 (字典树)
- [Hadoop]伪分布式Hadoop每次start都需要重新format namenode
- CALayer的基本使用
- 在linux上安装git
- hdoj 2206 IP的计算
- 第二章第17题
- 截图功能的简单实现
- 弗洛伊德算法(Floyd)
- 宏、函数、宏函数的区别