Pagini recente » Cod sursa (job #373130) | Cod sursa (job #1982519) | Cod sursa (job #2974456) | Cod sursa (job #2630648) | Cod sursa (job #868906)
Cod sursa(job #868906)
#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;
}
*/