POJ3080Blue Jeans(暴力)

开始做字符串专题,地址

第一题水题,暴力就可以做

 1 #include <map>
 2 #include <set>
 3 #include <stack>
 4 #include <queue>
 5 #include <cmath>
 6 #include <ctime>
 7 #include <vector>
 8 #include <cstdio>
 9 #include <cctype>
10 #include <cstring>
11 #include <cstdlib>
12 #include <iostream>
13 #include <algorithm>
14 using namespace std;
15 #define INF 0x3f3f3f3f
16 #define inf (-((LL)1<<40))
17 #define lson k<<1, L, mid
18 #define rson k<<1|1, mid+1, R
19 #define mem0(a) memset(a,0,sizeof(a))
20 #define mem1(a) memset(a,-1,sizeof(a))
21 #define mem(a, b) memset(a, b, sizeof(a))
22 #define FOPENIN(IN) freopen(IN, "r", stdin)
23 #define FOPENOUT(OUT) freopen(OUT, "w", stdout)
24 
25 template<class T> T CMP_MIN(T a, T b) { return a < b; }
26 template<class T> T CMP_MAX(T a, T b) { return a > b; }
27 template<class T> T MAX(T a, T b) { return a > b ? a : b; }
28 template<class T> T MIN(T a, T b) { return a < b ? a : b; }
29 template<class T> T GCD(T a, T b) { return b ? GCD(b, a%b) : a; }
30 template<class T> T LCM(T a, T b) { return a / GCD(a,b) * b;    }
31 
32 //typedef __int64 LL;
33 typedef long long LL;
34 const int MAXN = 1000;
35 const int MAXM = 100005;
36 const double eps = 1e-12;
37 
38 char str[20][100], ansStr[100];
39 int T, N;
40 
41 int maxLen(char* s1, char* s2)
42 {
43     int ans = 0;
44     for(int i=0;s2[i];i++)
45     {
46         int len = 0;
47         for(int j=0;s1[j];j++)
48         {
49             if(s2[i+j] == s1[j]) len++;
50             else break;
51         }
52         ans = max(ans, len);
53     }
54     return ans;
55 }
56 
57 int main()
58 {
59     while(~scanf("%d", &T))while(T--)
60     {
61         mem0(str); mem0(ansStr);
62         scanf("%d%*c", &N);
63         for(int i=0;i<N;i++) scanf("%s", str[i]);
64         int ans = 0;
65         for(int i=0;str[0][i];i++)
66         {
67             int len = INF;
68             for(int j=1;j<N;j++)
69             {
70                 len = min( len, maxLen(&str[0][i], str[j]) );
71             }
72             if(ans < len)
73             {
74                 ans = len;
75                 for(int j=i;j<i+ans;j++) ansStr[j-i] = str[0][j];
76                 ansStr[i+ans] = 0;
77             }
78             else if(ans == len)
79             {
80                 int ok = 0;
81                 for(int j=0;j<ans;j++)
82                 {
83                     if(ok) ansStr[j] = str[0][i+j];
84                     else if(ansStr[j] != str[0][i+j])
85                     {
86                         if(ansStr[j] < str[0][i+j]) break;
87                         else { ansStr[j] = str[0][i+j]; ok = 1; }
88                     }
89                 }
90             }
91         }
92         if(ans >= 3)
93             printf("%s\n", ansStr  );
94         else printf("no significant commonalities\n");
95     }
96     return 0;
97 }

 

posted @ 2014-03-25 12:50  再见~雨泉  阅读(129)  评论(0编辑  收藏  举报