zoukankan      html  css  js  c++  java
  • pat 1077 Kuchiguse(20 分) (字典树)

    1077 Kuchiguse(20 分)

    The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker's personality. Such a preference is called "Kuchiguse" and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle "nyan~" is often used as a stereotype for characters with a cat-like personality:

    • Itai nyan~ (It hurts, nyan~)

    • Ninjin wa iyada nyan~ (I hate carrots, nyan~)

    Now given a few lines spoken by the same character, can you find her Kuchiguse?

    Input Specification:

    Each input file contains one test case. For each case, the first line is an integer N (2N100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character's spoken line. The spoken lines are case sensitive.

    Output Specification:

    For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, writenai.

    Sample Input 1:

    3
    Itai nyan~
    Ninjin wa iyadanyan~
    uhhh nyan~
    

    Sample Output 1:

    nyan~
    

    Sample Input 2:

    3
    Itai!
    Ninjinnwaiyada T_T
    T_T
    

    Sample Output 2:

    nai
      1 #include <iostream>
      2 #include <algorithm>
      3 #include <cstdio>
      4 #include <cstring>
      5 #include <string>
      6 #include <map>
      7 #include <stack>
      8 #include <vector>
      9 #include <queue>
     10 #include <set>
     11 #define LL long long
     12 #define INF 0x3f3f3f3f
     13 using namespace std;
     14 const int MAX = 1e5 + 10;
     15 
     16 int n, rt = 0, str_len = INF;
     17 struct node
     18 {
     19     int id, cnt, next[128];
     20 } P[MAX];
     21 char shortest_str[300];
     22 stack <char> st;
     23 
     24 void init(int x)
     25 {
     26     for (int i = 0; i <= 127; ++ i)
     27         P[x].next[i] = -1;
     28 }
     29 
     30 void my_insert(char *S, int len, int x)
     31 {
     32     int now = 0;
     33     for (int i = 0; i < len; ++ i)
     34     {
     35         if (P[now].next[S[i]] == -1)
     36         {
     37             P[now].next[S[i]] = ++ rt;
     38             init(rt);
     39         }
     40         now = P[now].next[S[i]];
     41         P[now].cnt ++;
     42     }
     43 }
     44 
     45 int my_find(int len)
     46 {
     47     int now = 0;
     48     for (int i = 0; i < len; ++ i)
     49     {
     50         if (P[now].next[shortest_str[i]] == -1) return -1;
     51         now = P[now].next[shortest_str[i]];
     52     }
     53     return P[now].cnt;
     54 }
     55 
     56 int main()
     57 {
     58 //    freopen("Date1.txt", "r", stdin);
     59     scanf("%d", &n);
     60     init(0);
     61     getchar();
     62     for (int i = 0; i < n; ++ i)
     63     {
     64         char buf[300];
     65         string temp;
     66         getline(cin, temp);
     67         int len = temp.size();
     68         for (int j = 0, k = len - 1; k >= 0; -- k, ++ j)
     69             buf[j] = temp[k];
     70         buf[len] = '';
     71         my_insert(buf, len, i);
     72         if (len < str_len)
     73         {
     74             str_len = len;
     75             strcpy(shortest_str, buf);
     76         }
     77     }
     78 
     79     if (P[P[0].next[shortest_str[0]]].cnt != n)
     80     {
     81         printf("nai
    ");
     82         return 0;
     83     }
     84     for (int i = str_len; i >= 1; -- i)
     85     {
     86         if (my_find(i) == n)
     87         {
     88             for (int j = 0; j < i; ++ j)
     89                 st.push(shortest_str[j]);
     90             break;
     91         }
     92     }
     93     while (st.size())
     94     {
     95         printf("%c", st.top());
     96         st.pop();
     97     }
     98 
     99     return 0;
    100 }
  • 相关阅读:
    Restful 的概念预览
    Bootstrap中alerts的用法
    Bootstrap HTML编码规范总结
    Bootstrap中img-circle glyphicon及js引入加载更快的存放位置
    PI数据库
    memcached
    Bootstrap中样式Jumbotron,row, table的实例应用
    js事件监听
    jquery显示隐藏操作
    HDU4521+线段树+dp
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9592055.html
Copyright © 2011-2022 走看看