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 (2≤N≤100). 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] = ‘\0‘;
 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\n");
 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 }

原文地址:https://www.cnblogs.com/GetcharZp/p/9592055.html

时间: 2024-11-05 12:17:10

pat 1077 Kuchiguse(20 分) (字典树)的相关文章

【PAT甲级】1077 Kuchiguse (20 分)(cin.ignore()吃掉输入n以后的回车接着用getine(cin,s[i])输入N行字符串)

题意: 输入一个正整数N(<=100),接着输入N行字符串.输出N行字符串的最长公共后缀,否则输出nai. 代码: #include<bits/stdc++.h>using namespace std;string s[107];int length[107];char ans[307];int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin>>n; cin.igno

PAT 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 artistic

1077 Kuchiguse (20分)

1. 题目 2. 思路 比较两个字符串获取相同尾部 用尾部去和第三个字符串比较 如果尾部长度为0退出 3. 注意点 读入一行中间有空格,PTA不支持gets函数.解决方法看标题5.tip 一般时间少于400ms的题目都会有超时问题,注意方法的时间复杂度 getline()之气要用getchar()读入一个'\n' 相同字符串的前面的空白字符应该去除(测试中没有这个) 4. 代码 #include<cstdio> #include<algorithm> #include<str

1077. Kuchiguse (20)【字符串处理】——PAT (Advanced Level) Practise

题目信息 1077. Kuchiguse (20) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B 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 prefere

[PAT] 1077 Kuchiguse (20 分)Java

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 artistic

PAT (Advanced Level) 1077. Kuchiguse (20)

最长公共后缀.暴力. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<stack> #include<queue> #include<string> #include<algorithm> using namespace std; char s[200][300];

PAT甲题题解-1077. Kuchiguse (20)-找相同后缀

#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <cmath> using namespace std; /* 找最长相同后缀 */ const int maxn=105; char str[maxn][300]; char ans[300]; int len[maxn]; int main() { int n; int

PAT:1077. Kuchiguse (20) AC

#include<stdio.h> #include<string.h> char in[100][260]; int main() { int n,lenMIN=260; scanf("%d",&n); getchar(); //[skill]吸收换行符 for(int i=0 ; i<n ; ++i) { gets(in[i]); int len=strlen(in[i]); if(len<lenMIN) lenMIN=len; for(

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 artistic