題目;10887 - Concatenation of Languages
題目大意:給出語言A和語言B,求這兩種語言拼接可以有多少不同的復合語言。
階梯思路:用set來剔除重復的,注意這裡的輸入要用gets(),因為語言會有空串。還有不要進行多余的,不必要的復制,會超時。
#include#include #include #include using namespace std; const int N = 1505; int t, m, n; char s1[N][15], s2[N][15]; set vis; int main () { scanf("%d", &t); for (int i = 1; i <= t; i++ ) { scanf("%d%d%*c", &m, &n); int j, k; for (j = 0; j < m; j++ ) gets(s1[j]); for (j = 0; j < n; j++) gets(s2[j]); int count = 0; for (j = 0; j < m; j++) { char s[30]; strcpy(s, s1[j]); int len = strlen(s1[j]); for (k = 0; k < n; k++) { s[len] = '\0'; strcat(s, s2[k]); if (!vis.count(s)) // printf("%s\n", s); vis.insert(s); } } printf("Case %d: %d\n",i, vis.size()); vis.clear(); } return 0; }