zoukankan      html  css  js  c++  java
  • 3/22 补题

    CF 1285D Trie+贪心

    一点通2.3的变体,第一眼看成原题。。。

    01trie上贪心 很裸的题

    进阶版2.3例题里面有一堆。。。。不过当年做的加强版是这样的(可持久化Trie+贪心)

    //#define LOCAL
    #include <cstring>
    #include <iostream>
    #include <sstream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <functional>
    #include <utility>
    #include <bitset>
    #include <cmath>
    #include <cstdlib>
    #include <ctime>
    #include <cstdio>
    using namespace std;
    #define X_mem(x,y,z) (X_mem[x][y][z] ? X_mem[x][y][z] :X_mem[x][y][z]=mem(x,y,z))
    // X_INIT=0  mem_Macro
    #define INF 0x3f3f3f3f
    #define MOD 1000000007
    #define FOR(i,j,k) for(int i=j;i<k;i+=1)
    #define FORD(i,j,k) for(int i=j;i>k;i-=1)
    #define uLL unsigned long long
    #define LL long long
    #define SZ(x) int(x.size())
    #define pb push_back
    #define maxnode 5000010
    #define maxsize 2
    int t,ans;
    int a[100010];
    struct Trie10{
        int ch[maxnode][maxsize];
        int lr[maxnode][2];
        //int r[maxnode];
        int sz;
        void init(){
            sz=1;memset(ch[0],0,sizeof(ch[0]));//memset(val,0,sizeof(val));
        }
        void insert(int x){
            int u=0;
            FORD(i,30,-1){
                int c=(x>>i)&1;
                if(!ch[u][c]){
                    memset(ch[sz],0,sizeof(ch[sz]));
                    memset(lr[sz],0,sizeof(lr[sz]));
                    ch[u][c]=sz++;
                }
                lr[u][c]++;
                u=ch[u][c]; 
            }
            return;
        }
        int query(int cnt,int dep){
            if(dep>=0){
                if(lr[cnt][1]==0) return query(ch[cnt][0],dep-1);
                else if(lr[cnt][0]==0) return query(ch[cnt][1],dep-1);
                else return (1<<(dep-1))+min(query(ch[cnt][1],dep-1),query(ch[cnt][0],dep-1));
            }
            return 0;
        }
    };
    int main(){
    #ifdef LOCAL
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    #endif
    scanf("%d",&t);
    Trie10 tt;
    tt.init();
    ans=0;
    FOR(i,0,t){
        scanf("%d",&a[i]);
        tt.insert(a[i]); 
    }
    //FOR(i,0,t)
    ans=(tt.query(1,30));
    printf("%d
    ",ans);
    //system("pause");
    #ifdef LOCAL
    fclose(stdin);
    fclose(stdout);
    #endif
    return 0;
    }
    ac代码

    HDU 2222

    八方向ac自动机裸题。

    因为我写的ac自动机是加了路径压缩的,所以毫无疑义地炸了空间。。。。不想写原版的了。。。等我把后缀数组学了再回来补吧。。。

    贴个板子

    #define maxnode 1000010
    #define maxsize 26
    struct ahocT{
        int ch[maxnode][maxsize];
        int e[maxnode],fail[maxnode];
        int sz;
        void init(){
            sz=1;memset(ch[0],0,sizeof(ch[0]));memset(e,0,sizeof(e));return;
        }
        int idx(char c) {return c-'a';}
        void insert(char *x){
            int u=0,len=strlen(x);
            FOR(i,0,len){
                int c=idx(x[i]);
                if(!ch[u][c]){
                    memset(ch[sz],0,sizeof(ch[sz]));
                    ch[u][c]=sz++;  
                }
                u=ch[u][c];
            }
            e[u]++;
            return;
        }
        void build(){
            int u;
            queue<int> q;
            memset(fail,0,sizeof(fail));
            FOR(i,0,26)
            if(ch[0][i]) q.push(ch[0][i]);
            while(!q.empty()){
                u=q.front();q.pop();
                FOR(i,0,26){
                    if(ch[u][i]) {
                        fail[ch[u][i]]=ch[fail[u]][i];
                        q.push(ch[u][i]);
                    }
                    else ch[u][i]=ch[fail[u]][i];
                }
            }
            return;
        }
        int query(char *x){
            int ans=0,c=0,len=strlen(x);
            FOR(i,0,len){
                c=ch[c][idx(x[i])];
                for(int j=c;c&&~e[c];j=fail[j]) ans+=e[j],e[j]=-1;
            }
            return ans;
        }
    };
    板子

    update:

    突然发现炸空间是因为query函数写炸了。。。草。。。

    补题ing

  • 相关阅读:
    ASP.net实现WEB站点的后台定时任务[转]
    個人所得稅計算
    當VS2005 遇上 LINQ[转]
    NBearV3中文教程总目录
    C#开源框架
    excel 不能使用对象链接和嵌入的错误
    PetShop 学习
    ADHelper类与扩展应用
    (javascript,treeview)treeview通过checkbox来进行全选单选
    (javascript)动态添加的控件如何设置其属性
  • 原文地址:https://www.cnblogs.com/mukoiaoi/p/12546289.html
Copyright © 2011-2022 走看看