zoukankan      html  css  js  c++  java
  • LightOJ 1129

    **题意:**给出n条串判断是否存在一个串为另一个串的前缀。 **思路:**套Trie树的模板,先全部插入,再查找每个字串,如果查找字串完毕,但还存在下一个节点,说明存在前缀。
    /** @Date    : 2016-11-09-20.09
    * @Author : Lweleth (SoungEarlf@gmail.com)
    * @Link : https://github.com/
    * @Version :
    */
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <utility>
    #include <vector>
    #include <map>
    #include <set>
    #include <string>
    #include <stack>
    #include <queue>
    #define LL long long
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;

    const int INF = 0x3f3f3f3f;
    const int N = 1e5+20;

    char a[10010][15];
    struct yuu
    {
    int cnt;
    int p;
    int nxp[N][12];


    int init()
    {
    memset(nxp[0], INF, sizeof(nxp[0]));//
    cnt = 1;//
    p = 0;
    }

    int idx(char a)
    {
    return a - '0';
    }

    void Insert(char *s)
    {
    int t = p;
    int x = strlen(s);
    for(int i = 0; i < x; i++)
    {
    int c = idx(s[i]);
    if(nxp[t][c] == INF)
    {
    memset(nxp[cnt], INF, sizeof(nxp[cnt]));//注意此处初始化的是下一个下标所在的空间
    nxp[t][c] = cnt;
    //cout << cnt << endl;
    cnt++;
    }
    t = nxp[t][c];//
    }

    }

    int Find(char *s)
    {
    int t = p;
    int x = strlen(s);
    for(int i = 0; i < x; i++)
    {
    int c = idx(s[i]);
    //cout << i << "~" << c <<endl;
    if(nxp[t][c] == INF)
    return 0;
    t = nxp[t][c];
    }
    for(int i = 0; i < 10; i++)
    {
    if(nxp[t][i] != INF)
    return 1;
    }
    return 0;
    }

    }tt;



    int main()
    {
    int T;
    int cnt = 0;
    cin >> T;
    while(T--)
    {
    int n;
    scanf("%d", &n);
    MMF(a);
    tt.init();
    for(int i = 0; i < n; i++)
    {
    scanf("%s", a[i]);
    tt.Insert(a[i]);
    }
    int flag = 0;
    for(int i = 0; i < n; i++)
    {
    if(tt.Find(a[i]))
    {
    flag = 1;
    break;
    }
    }
    if(!flag)
    printf("Case %d: YES ", ++cnt);
    else printf("Case %d: NO ", ++cnt);
    }
    return 0;
    }
  • 相关阅读:
    基本数据类型
    运算
    登录程序
    MySQL索引
    内存泄漏排查&CPU负载高排查
    dubbo
    SPI
    缓存,热点key
    Java BigDecimal
    Spring Bean's life
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/6086902.html
Copyright © 2011-2022 走看看