Diccionario CCA
Enlace del título: nowcoder 217040
Para Niu Ke:
——> Haz clic en mí para saltar <——
Idea general
Hay algunas palabras de no más de 2 en el diccionario.
Luego, cada vez que se da una palabra, se le pregunta cuántas palabras del diccionario puede obtener esta palabra intercambiando letras adyacentes (o no intercambiando).
Ideas
Debido a que la longitud no excede de dos, consideramos estadísticas directas.
Puedes hacer una matriz fa, b f_ {a, b}Fun , b, Grabar ab abLa palabra a b se utiliza como respuesta a la pregunta. (Si la palabra tiene solo una letra, entoncesbbb es0 00 )
Entonces consideramos que el número en un diccionario no se lee, y esffcorrespondiente a su forma invertidaf más uno.
Hay casos especiales en los que no es necesario agregar la forma de voltear, es decir, es igual que el original después de voltear, es decir, solo uno o dos caracteres son iguales.
De hecho, si es más grande, puedes usar hash para hacerlo.
Código
#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;
}