百练 2797 短前缀 解题呈报
添加时间:2013-6-11 点击量:
1.Link:http://poj.grids.cn/practice/2797/
2.Content
- 总时候限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 一个字符串的前缀是从该字符串的第一个字符肇端的一个子串。例如 carbon的字串是: c, ca, car, carb, carbo, 和 carbon。重视到这里我们不认为空串是字串, 然则每个非空串是它自身的字串. 我们如今能用前缀来缩略的默示单词。例如, carbohydrate 凡是用carb来缩略默示. 如今给你一组单词, 请求你找到独一标识每个单词的短前缀
鄙人面的例子中,carbohydrate 能被缩略成carboh, 然则不克不及被缩略成carbo (或其余更短的前缀) 因为已经有一个单词用carbo开端
一个正确匹配会覆盖一个前缀匹配,例如,前缀car正确匹配单词car. 是以 car 是 car的缩略语是没有二义性的 , “car”不会被当成carriage或者任安在列表中以car开端的单词. - 输入
- 输入包含至少2行,至多1000行. 每行包含一个以小写字母构成的单词,单词长度至少是1,至多是20.
- 输出
- 输出的行数与输入的行数雷同。每行输出由响应行输入的单词开端,后面跟着一个空格接下来是响应单词的没有二义性的短前缀标识符。
- 样例输入
-
carbohydrate
cart
carburetor
caramel
caribou
carbonic
cartilage
carbon
carriage
carton
car
carbonate
- 样例输出
-
carbohydrate carboh
cart cart
carburetor carbu
caramel cara
caribou cari
carbonic carboni
cartilage carti
carbon carbon
carriage carr
carton carto
car car
carbonate carbona
3.Code
1 #include <iostream>
2 #include <cstdlib>
3 #include <cstdio>
4 #include <cstring>
5 #define MAXSTR 21
6 #define MAXNUM 1010
7
8 char arr[MAXNUM][MAXSTR];
9 int main()
10 {
11 int count = 0;
12 int i,j,k;
13 while(scanf(%s,arr[count]) != EOF) count++;
14
15 char chs[MAXSTR],chs2[MAXSTR];
16 int len;
17 for(i = 0; i < count; i++)
18 {
19 len = strlen(arr[i]);
20 for(j = 1;j < len; j++)
21 {
22 strcpy(chs,arr[i]);
23 chs[j] = \0;
24
25 for(k = 0; k < count; k++)
26 {
27 strcpy(chs2,arr[k]);
28 chs2[j] = \0;
29 if(!strcmp(chs,chs2) && k!=i) break;
30 }
31
32 if(k >= count) break;
33 }
34 if(j == len) printf(%s %s\n,arr[i],arr[i]);
35 else printf(%s %s\n,arr[i],chs);
36 }
37 return 0;
38 }
4.Method
(1)暴力查找
(2)断定前缀不克不及应用strstr
无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
1.Link:http://poj.grids.cn/practice/2797/
2.Content
- 总时候限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 一个字符串的前缀是从该字符串的第一个字符肇端的一个子串。例如 carbon的字串是: c, ca, car, carb, carbo, 和 carbon。重视到这里我们不认为空串是字串, 然则每个非空串是它自身的字串. 我们如今能用前缀来缩略的默示单词。例如, carbohydrate 凡是用carb来缩略默示. 如今给你一组单词, 请求你找到独一标识每个单词的短前缀
鄙人面的例子中,carbohydrate 能被缩略成carboh, 然则不克不及被缩略成carbo (或其余更短的前缀) 因为已经有一个单词用carbo开端
一个正确匹配会覆盖一个前缀匹配,例如,前缀car正确匹配单词car. 是以 car 是 car的缩略语是没有二义性的 , “car”不会被当成carriage或者任安在列表中以car开端的单词.- 输入
- 输入包含至少2行,至多1000行. 每行包含一个以小写字母构成的单词,单词长度至少是1,至多是20.
- 输出
- 输出的行数与输入的行数雷同。每行输出由响应行输入的单词开端,后面跟着一个空格接下来是响应单词的没有二义性的短前缀标识符。
- 样例输入
carbohydrate
cart
carburetor
caramel
caribou
carbonic
cartilage
carbon
carriage
carton
car
carbonate- 样例输出
carbohydrate carboh
cart cart
carburetor carbu
caramel cara
caribou cari
carbonic carboni
cartilage carti
carbon carbon
carriage carr
carton carto
car car
carbonate carbona
3.Code
1 #include <iostream>
2 #include <cstdlib>
3 #include <cstdio>
4 #include <cstring>
5 #define MAXSTR 21
6 #define MAXNUM 1010
7
8 char arr[MAXNUM][MAXSTR];
9 int main()
10 {
11 int count = 0;
12 int i,j,k;
13 while(scanf(%s,arr[count]) != EOF) count++;
14
15 char chs[MAXSTR],chs2[MAXSTR];
16 int len;
17 for(i = 0; i < count; i++)
18 {
19 len = strlen(arr[i]);
20 for(j = 1;j < len; j++)
21 {
22 strcpy(chs,arr[i]);
23 chs[j] = \0;
24
25 for(k = 0; k < count; k++)
26 {
27 strcpy(chs2,arr[k]);
28 chs2[j] = \0;
29 if(!strcmp(chs,chs2) && k!=i) break;
30 }
31
32 if(k >= count) break;
33 }
34 if(j == len) printf(%s %s\n,arr[i],arr[i]);
35 else printf(%s %s\n,arr[i],chs);
36 }
37 return 0;
38 }
4.Method
(1)暴力查找
(2)断定前缀不克不及应用strstr
无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》