//============================================================================ // Name : 1293.cpp // Author : BreakDark (Jhonny Monrroy) basado en la solucion publicada en [http://www.cnblogs.com/njczy2010/p/4337078.html] // Version : 3.0 16/09/2016 // Copyright : (Solucion obtenida de [http://www.cnblogs.com/njczy2010/p/4337078.html]) // Description : Solucion al Problema: 1293 - Document Analyzer [http://lightoj.com/] //============================================================================ // Accepted!!! xD #include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <sstream> #include <map> using namespace std; int T; // para el numero de casos de prueba int t; // indice /** * Metodo procesarPalabra: reemplaza los caracteres que no son letras por * espacios * * @author BreakDark (Jhonny Monrroy) * @version 1.0 20 ago. 2016 * @param palabra * Cadena a procesar * @return Retorna la cadena ya proceesda */ string procesarPalabra(string palabra) { string nuevaLinea = ""; char letra; for (int i = 0; i < palabra.length(); i++) { letra = palabra[i]; if (letra >= 'a' && letra <= 'z') { nuevaLinea += letra; } else { nuevaLinea += ' '; } } return nuevaLinea; } /** * Metodo obtenerRangoMenor: Metodo que busca el rango menor para este * problema * * @author BreakDark (Jhonny Monrroy) * @version 1.0 20 ago. 2016 * @param vecPal * Vector de palabras * @param numPal * Numero de palabras del vector * @param hashPal * HashMap de palabras no iguales */ void obtenerRangoMenor(string vecPal[], int numPal, map<string, int> hashPal) { int p = -1; int q = numPal + 1; int posible_p, posible_q; int cont = 0; // contador de palabras encontradas posible_p = 0; posible_q = 0; while (posible_p < numPal) { for (; posible_q < numPal; posible_q++) { hashPal[vecPal[posible_q]]++; if (hashPal[vecPal[posible_q]] == 1) cont++; if (cont == hashPal.size()) { for (; posible_p <= posible_q; posible_p++) { if (hashPal[vecPal[posible_p]] == 1) { if (posible_q - posible_p < q - p) { p = posible_p; q = posible_q; } else if (posible_q - posible_p == q - p) { if (posible_p < p) { p = posible_p; q = posible_q; } } hashPal[vecPal[posible_p]]--; cont--; posible_p++; posible_q++; break; } hashPal[vecPal[posible_p]]--; } break; } } if (posible_q == numPal) break; } printf("Case %d: %d %d\n", t, (p + 1), (q + 1)); } int main() { //int T; // para el numero de casos de prueba string palabra; // para cada palabra char linea[102]; // para la linea que se lea string linea_s; string palabras[50000]; // vector de palabras int numPal; // para el numero de palabras a almacenar map<string, int> hashPalabras; // conjunto de palabras no repetidas // AQUI INICIA EL PROGRAMA scanf("%d", &T); for (t = 1; t <= T; t++) { numPal = 0; // vaciamos el vector hashPalabras.clear(); while (scanf("%s", linea) != EOF && strcmp(linea, "END") != 0) { char nuevaLinea[102] = ""; char letra; for (int i = 0; i < strlen(linea); i++) { letra = linea[i]; if (letra >= 'a' && letra <= 'z') { nuevaLinea[strlen(nuevaLinea)] = letra; } else { strcat(nuevaLinea, " "); } } strcpy(linea, nuevaLinea); //cout<<linea<<endl; char *vecPalabras; vecPalabras = strtok(linea, " "); while (vecPalabras != NULL) { //printf("%s\n", vecPalabras); palabras[numPal] = vecPalabras; stringstream ss; ss << palabras[numPal]; ss >> linea_s; hashPalabras[linea_s] = 0; // seleccionamos palabras distintas numPal++; vecPalabras = strtok(NULL, " "); } } obtenerRangoMenor(palabras, numPal, hashPalabras); } return 0; }
Blog dedicado a la publicación de artículos, programas propios, traducciones de Roms de Nes, super Nes y mas, y alguno que otro artículo sobre tecnologia.
Thursday, September 15, 2016
Solucion al Problema: 1293 - Document Analyzer [http://lightoj.com/] con C++
Para ver el link del problema Click aqui
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment