Cod sursa(job #868906)

Utilizator andrei97andrei andrei97 Data 31 ianuarie 2013 19:13:56
Problema ADN Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.18 kb
#include <iostream>
#include <fstream>
//#include <cstring>
using namespace std;

char adn[18][30002];

bool subsiruri[17];

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);
//bool issubsir(char *str, char *ss);

int main()
{
    int n, i = 0, j = 1;
    n = citiredate();
    //verific daca exista subsiruri in datele de intrare
    /*while(i < n)
    {
        j = 0;
        while(j < n)
        {
            if(issubsir(adn[i], adn[j]))subsiruri[j] = true;
            j++;
        }
        i++;
    }
    i = 0; j = 0;
    while(i < n)
    {
        if(!subsiruri[i])
        {
            assign(raspuns, adn[i], 0);
            break;
        }
        i++;
    }
    i++;
    while(i < n)
    {

    }*/
    assign(raspuns, adn[0], 0);
    i++;
    while(i < n)
    {
        if(fsim(raspuns, adn[j], 0))
        {
            assign(raspuns, subsircurent, 0);
            i++;
        }
        else if(fsim(adn[j], raspuns, 0))
        {
            assign(raspuns, subsircurent, 0);
            i++;
        }
        j++;
        if(j == n) j = 1;
    }
    //scriem raspunsul
    ofstream out("adn.out");
    out << raspuns;
    out.close();
    return 0;
}


int citiredate()
{
    short int n;
    ifstream 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 = k, j = 0;
     //stergem datele din subsircurent de la pozitia k
     while(subsircurent[i] != '\0')
     {
         subsircurent[i] = '\0';
         i++;
     }
     i = 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 = pos;
    //sterg datele care sunt in sir
    while(str1[i] != '\0')
    {
        str1[i] = '\0';
        i++;
    }
    i = 0;
    //copiez datele din str2 in str1
    while(str2[i] != '\0')
    {
        str1[pos] = str2[i];
        i++;pos++;
    }
    str1[pos] = '\0';
}
/*
bool issubsir(char *str, char *ss)
{
    int i = 0, j = 0;
    while(str[i] != ss[0] && str[i] != '\0') i++;
    while(str[i] == ss[j] && str[i] != '\0' && ss[j] != '\0')
    {i++;j++;}
    if(ss[j] != '\0' && str[i] != '\0')
    {
        return issubsir(str + i, ss);
    }
    else if(str[i] == '\0')return false;
    else return true;
}
*/