zoukankan      html  css  js  c++  java
  • P2580 于是他错误的点名开始了(Trie)

     https://www.luogu.com.cn/problem/P2580

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 5e5 + 5;
    int n,m;
    string s;
    int num;
    struct node{
        int son[27],cnt;
        bool flag;
    }trie[maxn];
    void insert(string s){
        int u = 0;
        for(int i = 0; i < s.size(); i++){
            int v = s[i] - 'a';
            if(!trie[u].son[v])
                trie[u].son[v] = ++num;
            u = trie[u].son[v];
        }
        trie[u].flag = true;
    }
    int find(string s){
        int u = 0;
        for(int i = 0; i < s.size(); i++){
            int v = s[i] - 'a';
            if(!trie[u].son[v]) return 3;
            u = trie[u].son[v];
        }
        if(!trie[u].flag)
            return 3;
        if(!trie[u].cnt){
            trie[u].cnt++;
            return 1;
        }
        return 2;
    }
    int main(){
        //freopen("in","r",stdin);
        ios::sync_with_stdio(0);
        cin >> n;
        for(int i = 0; i < n; i++){
            cin >> s;
            insert(s);
        }
        cin >> m;
        for(int i = 0; i < m; i++) {
            cin >> s;
            if(find(s) == 1)
                cout << "OK
    ";
            else if(find(s) == 2)
                cout << "REPEAT
    ";
            else cout << "WRONG
    ";
        }
    
        return 0;
    }

    UVA11362 Phone List

    https://www.luogu.com.cn/problem/UVA11362

    #include<bits/stdc++.h>
    
    using namespace std;
    const int maxn = 4e5 + 5;
    
    struct node {
        int son[11], sum;
        bool flag;
    
        void clear() {
            memset(son, 0, sizeof(son));
            sum = 0;
            flag = 0;
        }
    } trie[maxn];
    
    int n, t, num;
    string s[maxn];
    
    void insert(string s) {
        int len = s.size(), u = 0;
        for (int i = 0; i < len; i++) {
            int v = s[i] - '0';
            if (!trie[u].son[v])
                trie[u].son[v] = ++num;
            trie[u].sum++;
            u = trie[u].son[v];
        }
        trie[u].flag = true;
    }
    
    int find(string s) {
        int len = s.size(), u = 0;
        for (int i = 0; i < len; i++) {
            int v = s[i] - '0';
            if (!trie[u].son[v]) return 0;
            u = trie[u].son[v];
        }
        if (trie[u].sum == 0)return 0;
        return 1;
    }
    
    int main() {
        //freopen("in", "r", stdin);
        cin >> t;
        while (t--) {
            num = 0;
            for (int i = 0; i < maxn; i++)
                trie[i].clear();
            cin >> n;
            for (int i = 0; i < n; i++) {
                cin >> s[i];
                insert(s[i]);
            }
            bool ans = false;
            for (int i = 0; i < n; i++) {
                int res = find(s[i]);
                if (res == 1) {
                    ans = true;
                    break;
                }
            }
            if (ans) cout << "NO
    ";
            else cout << "YES
    ";
        }
    }
    View Code

    大佬的博客

    https://www.luogu.com.cn/blog/juruohyfhaha/trie-xue-xi-zong-jie

  • 相关阅读:
    POJ 1306.Combinations
    HDU 5640.King's Cake
    HDU 1072.Nightmare
    HDU 2717.Catch That Cow
    HDU 1372.Knight Moves
    HDU 1548.A strange lift
    AOJ 802.运输宝物
    AOJ 794.西瓜理发记(二)
    AOJ 793.西瓜理发记(一)
    AOJ 789.买酒
  • 原文地址:https://www.cnblogs.com/xcfxcf/p/12404381.html
Copyright © 2011-2022 走看看