POJ 3080 Blue Jeans
按照 CSGrandeur 的方法做的;
枚举第一个串的所有子串,并查找是否在其他串中出现,需要注意题目要求在最大长度前提下,输出字典序最小的串,这里也点小难,刚开始没看懂大侠的代码,后来试了几种控制方法,有的需要先把 cstr 清空,显得麻烦,才逐渐理解了;
# include <stdio.h> # include <string.h> # define N 65 int n; char dic[15][N], cstr[N]; char find(void) { char buf[N], ok; int len, i, j; cstr[0] = 0; for (len = 60; len > 2; --len) { for (j = 60-len; j >= 0; --j) { memcpy(buf, dic[0]+j, len); buf[len] = 0; if (strcmp(buf, cstr) < 0 || strlen(cstr) < len) { for (i = 1; i < n; ++i) if (strstr(dic[i], buf) == NULL) break; if (i == n) strcpy(cstr, buf); } } if (strlen(cstr) == len) return 1; } return 0; } int main() { int T, i; scanf("%d", &T); while (T--) { scanf("%d", &n); for(i = 0; i < n; ++i) scanf("%s", dic[i]); if (find()) puts(cstr); else puts("no significant commonalities"); } return 0; }
//