[Nowcoder 217040] Diccionario de CCA

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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43346722/article/details/115218582
Recomendado
Clasificación