zoukankan      html  css  js  c++  java
  • loj2291. 「THUSC 2016」补退选

    https://loj.ac/problem/2291

    在Tire树套vector上乱搞一波

    如何二分查找时间

    #include<cstdio>
    #include<vector>
    #include<algorithm>
    #define FOR(i,s,t) for(register int i=s;i<=t;++i)
    #define pb push_back
    using namespace std;
    inline int fabs(int a){return a>0?a:-a;}
    int n,k,g;
    int a,b,c,v,ans;
    const int N=6333333;
    int tr[N][10],sz=1,root,cnt[N];
    vector<int>s[N],t[N];
    inline int gch(int x,int c){
    	register int &r=tr[x][c];
    	if(!r)r=++sz,s[sz].pb(0),t[sz].pb(0);
    	return r;
    }
    char S[233];
    int main(){
    	scanf("%d",&n);
    	s[1].pb(0);t[1].pb(0);
    	FOR(i,1,n){
    		scanf("%d%s",&k,S);
    		g=1;
    		switch(k){
    			case 1:{
    				for(register int j=0;S[j];++j){
    					++cnt[g=gch(g,S[j]-'a')];
    					if(cnt[g]>s[g].back())t[g].pb(i),s[g].pb(cnt[g]);
    				}
    				break;
    			}
    			case 2:{
    				for(register int j=0;S[j];--cnt[g=gch(g,S[j]-'a')],++j);
    				break;
    			}
    			case 3:{
    				scanf("%d%d%d",&a,&b,&c);
    				v=1ll*(1ll*a*fabs(ans)%c+b%c)%c;
    				for(register int j=0;S[j];++j)
    					g=tr[g][S[j]-'a'];
    				if(!g){
    					ans=-1;
    					printf("%d
    ",ans);
    					goto die; 
    				}
    				else{
    					register vector<int>::iterator it=upper_bound(s[g].begin(),s[g].end(),v);
    					if(it==s[g].end()){
    						ans=-1;
    						printf("%d
    ",ans);
    						goto die; 
    					}
    					ans=t[g][it-s[g].begin()];
    					printf("%d
    ",ans);
    				}
    				break;
    			}
    		}
    		die:;
    	}
    	return 0;
    } 
    

      

  • 相关阅读:
    Tensorboard返回的网址打不开问题
    css的常用知识点
    js的基础知识
    html的常用标签
    python的进程与线程
    python的socket的学习
    python的异常处理
    python类的相关知识第二部分
    python类的相关知识第一部分
    python装饰器的学习笔记
  • 原文地址:https://www.cnblogs.com/Stump/p/8125888.html
Copyright © 2011-2022 走看看