POJ 2001 más corta prefijos resolver informe trie

POJ 2001 más corta prefijos informe de resolver

Esbozo de solución: construir un trie, cada uno a un punto, el conteo de puntos +, cuando se mira desde el frente hacia atrás para encontrar cada cadena, si el recuento es 1, lo que indica una salida única, directa, si tiene hasta el final de la cadena, también la salida directa.
Aquí Insertar imagen Descripción

#include<iostream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
#include<map>
#include<stack>
#include<stdio.h>
#include<cstdio>
#include<stdlib.h>
#include<fstream>
#include<iomanip>
#pragma warning(disable:4996)
#define INF 0x3f3f3f3f
#define ll long long
#define PI acos(-1.0)
const int N = 1000010;
const int maxn = 1e9;
using namespace std;
char a[1005][23];
struct trie {
	int cnt;//标记到达该点的次数
	trie* next[26];
};
trie* root;
void build(trie* t, char c[])
{
	int len = strlen(c);
	for (int i = 0; i < len; i++)
	{
		if (t->next[c[i] - 'a'] == NULL)
		{
			trie* tem = (trie*)malloc(sizeof(trie));
			tem->cnt = 1;
			for (int i = 0; i < 26; i++)
			{
				tem->next[i] = NULL;
			}
			t->next[c[i] - 'a'] = tem;
			t = t->next[c[i] - 'a'];
		}
		else
		{
			t = t->next[c[i] - 'a'];
			t->cnt++;
		}
	}
}
void query(trie* t, char c[])
{
	int len = strlen(c);
	char cc[25];
	memset(cc, 0, sizeof(cc));
	for (int i = 0; i < len; i++)
	{
		if(t->next[c[i] - 'a'] != NULL)
		{
			cc[i] = c[i];
			t = t->next[c[i] - 'a'];
			if (t->cnt == 1 || i == len - 1)
			{
				printf("%s %s\n", c, cc);
				return;
			}
		}
	}
}
int main()
{
	int n = 0;
	root = (trie*)malloc(sizeof(trie));
	root->cnt = 0;
	for (int i = 0; i < 26; i++)
	{
		root->next[i] = NULL;
	}
	while (scanf("%s", &a[n]) != EOF)
	{
		build(root, a[n]);
		n++;
	}
	for (int i = 0; i < n; i++)
	{
		query(root, a[i]);
	}
}



Publicado 64 artículos originales · ganado elogios 0 · Vistas 1451

Supongo que te gusta

Origin blog.csdn.net/weixin_45566331/article/details/104680196
Recomendado
Clasificación