Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <iostream>
- using namespace std;
- const int N = 16000;
- string palabras[N];
- int peso[N];
- int maximo=0;
- int palabra_un_paso(const string &s1, const string &s2)
- {
- int N1 = s1.size();
- int N2 = s2.size();
- int i,j,z;
- bool termine=false;
- if((N1==N2+1)||(N2==N1+1)||(N2==N1)){
- if(N1==N2){
- j=0;
- for(i=0;i<N1;i++){
- if(!(s1[i]==s2[i]))
- j++;
- if(j>1||(j==0&&i==N1-1))
- return -1;
- }
- }else{
- if(N1==N2+1){ // n1 es mas grande ¡¡¡
- i=0;
- j=0;
- z=0;
- while(!termine){
- if(!(s1[i]==s2[j])){
- z++;
- if(z<2){
- i++;
- }else{
- /*z >= 2 Difieren en 2 o más caracteres*/
- return -1;
- }
- }else{
- if(i==N1){ //estoy en la ultima comparación
- return 1;
- }
- i++;
- j++;
- }
- }
- }else{
- i=0;
- j=0;
- z=0;
- while(!termine){
- if(!(s1[j]==s2[i])){
- z++;
- if(z<2){
- i++;
- }else{
- /*z >= 2 Difieren en 2 o más caracteres*/
- return -1;
- }
- }else{
- if(i==N2){ //estoy en la ultima comparación
- return 1;
- }
- i++;
- j++;
- }
- }
- }
- }
- }else{
- return -1;
- }
- return 1;
- }
- int main(){
- string aux;
- int i=0;
- cin>>aux;
- while (!cin.eof()) {
- palabras[i]=aux;
- peso[i] = 1;
- for(int j = i-1; j>=0; j--){
- if((peso[i] + j + 1 >= maximo) && (peso[j] + 1> peso[i]) && (palabra_un_paso(palabras[i],palabras[j])==1)){
- peso[i]=peso[j]+1;
- if(peso[i]>maximo){
- maximo=peso[i];
- break;
- }
- }
- }
- i++;
- if(maximo > (N - i)) break;
- cin>>aux;
- }
- cout<<maximo<<endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment