cf Queries on a String
阿新 • • 發佈:2018-11-04
#include<iostream> #include<cstring> #include<cstdio> using namespace std; #define maxn 200005 char s[maxn]; int nxt[maxn][27],ans[maxn],t[maxn]; int main(){ int q; scanf("%s %d",s+1,&q); int n=strlen(s+1); memset(nxt[n],-1,sizeof nxt[n]); for(int i=n-1;i>=0;i--)for(int j=0;j<26;j++) if(s[i+1]-'a'==j) nxt[i][j]=i+1;//下一個 'a'+j 在字串的第i+1個位置 else nxt[i][j]=nxt[i+1][j];//下一個'a'+j字元在字串的nxt[i+1][j]個位置 int len=1; char op[10],c; t[0]=0; while(q--){ scanf("%s",op); if(op[2]=='s'){ cin >> c;if(t[len-1]==-1) t[len]=-1; else t[len]=nxt[t[len-1]][c-'a']; len++; } else len--; if(t[len-1]!=-1) puts("YES"); else puts("NO"); } return 0; }