10887 - Concatenation of Languages(stl set)

题目;10887 - Concatenation of Languages

题目大意:给出语言A和语言B,求这两种语言拼接可以有多少不同的复合语言。

阶梯思路:用set来剔除重复的,注意这里的输入要用gets(),因为语言会有空串。还有不要进行多余的,不必要的复制,会超时。


#include<stdio.h>
#include<string.h>
#include<set>
#include<string>
using namespace std;

const int N = 1505;
int t, m, n;
char s1[N][15], s2[N][15];
set<string> 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;
}


你可能感兴趣的:(10887 - Concatenation of Languages(stl set))