Cod sursa(job #868267)

Utilizator andrei97andrei andrei97 Data 30 ianuarie 2013 21:08:16
Problema ADN Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.33 kb
#include <iostream>
#include <fstream>
//#include <cstring>
using namespace std;

char adn[18][30002];

char raspuns[1000000];
char subsircurent[1000000];

//int sl(char *ptr);//O.K.
int citiredate();//O.K.
bool fsim(char *str1, char *str2, int k);//O.K.
void assign(char *str1, char *str2, int pos);


int main()
{
    int n, i = 0, j;
    n = citiredate();n--;
    if(fsim(adn[i], adn[n], 0)) assign(raspuns, subsircurent, 0);
    else if(fsim(adn[n], adn[i], 0)) assign(raspuns, subsircurent, 0);
    i++;
    while(i < n)
    {
        j = i;
        if(fsim(raspuns, adn[j], 0)) assign(raspuns, subsircurent, 0);
        else if(fsim(adn[j], raspuns, 0)) assign(raspuns, subsircurent, 0);
        else
        {
            j++;
            while(j < n)
            {
                if(fsim(raspuns, adn[j], 0)){assign(raspuns, subsircurent, 0);break;}
                else if(fsim(adn[j], raspuns, 0)){assign(raspuns, subsircurent, 0);break;}
                j++;
            }
        }
        i++;
    }

    //cout << raspuns;
    ofstream out("adn.out");
    out << raspuns;
    out.close();
    return 0;
}


int citiredate()
{
    short int n;
    fstream in("adn.in");
    in >> n;
    for(short int i = 0; i < n; i++)
    {
        in >> adn[i];
    }
    in.close();
    return n;
}

bool fsim(char *str1, char *str2, int k)
{
     int i = 0, j = 0;
     while(str1[i] != str2[j] && str1[i] != '\0')
     {
         subsircurent[k] = str1[i];
         i++;k++;
     }
     if(str1[i] == '\0') return false;
     while(str1[i] == str2[j] && str1[i] != '\0' && str2[j] != '\0')
     {
         subsircurent[k] = str1[i];
         i++;j++;k++;
     }
     if(str1[i] == '\0')
     {
         while(str2[j] != '\0')
         {
             subsircurent[k] = str2[j];
             j++;k++;
         }
         return true;
     }
     else if(str2[j] == '\0')
     {
         while(str1[i] != '\0'){
            subsircurent[k] = str1[i];
            i++;k++;
         }
         return true;
     }
     else
     {
         return fsim(&str1[i], str2, k);
     }
}

/*
int sl(char *ptr)
{
    int i = 0;
    while(*(ptr + i) != '\0') i++;
    return i;
}
*/
void assign(char *str1, char *str2, int pos)
{
    int  i = 0;
    while(str2[i] != '\0')
    {
        str1[pos] = str2[i];
        i++;pos++;
    }
    str1[pos] = '\0';
}