CCA的词典
题目链接:nowcoder 217040
到主站看:https://blog.csdn.net/weixin_43346722/article/details/115218582
题目大意
有一些长度不超过 2 的单词在字典中。
然后每次给出一个单词,问你多少个字典中的单词可以通过交换相邻字母(或者不交换)得到这个单词。
思路
因为长度不超过二,我们考虑直接统计。
可以搞一个数组 ,记录
这个单词作为询问的答案。(如果这个单词只有一个字母,那
就是
)
然后我们考虑没读入一个字典中的数,就把它和它的翻转形对应的 加一。
有特殊的情况不用给翻转形加,就是翻转之后跟原来一样,那就是只有一个字符或者两个字符一样。
其实如果大一点可以用哈希来做。
代码
#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; }