【nowcoder 217040】CCA的词典

CCA的词典

题目链接:nowcoder 217040

到牛客看:

——>点我跳转<——

题目大意

有一些长度不超过 2 的单词在字典中。
然后每次给出一个单词,问你多少个字典中的单词可以通过交换相邻字母(或者不交换)得到这个单词。

思路

因为长度不超过二,我们考虑直接统计。

可以搞一个数组 f a , b f_{a,b} fa,b,记录 a b ab ab 这个单词作为询问的答案。(如果这个单词只有一个字母,那 b b b 就是 0 0 0
然后我们考虑没读入一个字典中的数,就把它和它的翻转形对应的 f f f 加一。
有特殊的情况不用给翻转形加,就是翻转之后跟原来一样,那就是只有一个字符或者两个字符一样。

其实如果大一点可以用哈希来做。

代码

#include<cstdio>
#include<cstring>

using namespace std;

int n, ans[31][31];
char c[5], cn;

int main() {
    
    
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
    
    
		scanf("%s", &c);
		cn = strlen(c);
		if (cn == 1) ans[c[0] - 'a' + 1][0]++;
			else {
    
    
				ans[c[0] - 'a' + 1][c[1] - 'a' + 1]++;
				if (c[0] != c[1]) ans[c[1] - 'a' + 1][c[0] - 'a' + 1]++;
				//如果单词两个字母一样,那翻不翻转都是那样,就不用再加
			}
	}
	
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
    
    
		scanf("%s", &c);
		cn = strlen(c);
		if (cn == 1) printf("%d\n", ans[c[0] - 'a' + 1][0]);
			else printf("%d\n", ans[c[0] - 'a' + 1][c[1] - 'a' + 1]);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43346722/article/details/115218582