Ho risolto crossover ma mi fa tutti i casi del subtask 1 e 4 nel tempo limite negli altri sfora ma li fa giusti, potreste darmi qualche consiglio?
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAXL 100008
void scala(char* str)
{
int cont;
for(cont=1;cont<=strlen(str);cont++)
{
str[cont-1]=str[cont];
}
}
void crossover(char s[], char t[], char result[])
{
int cont=0, contf=0, i, esci=0;
char vapp[MAXL], fine[MAXL];
while((s[0]!='\0' || t[0]!='\0') && esci==0)
{
if(s[0]=='\0')
{
for(i=0;i<strlen(t);i++)
{
result[cont]=t[i];
cont++;
}
esci=1;
}
else if(t[0]=='\0')
{
for(i=0;i<strlen(s);i++)
{
result[cont]=s[i];
cont++;
}
esci=1;
}
else if(s[0]==t[strlen(t)-1])
{
t[strlen(t)-1]='\0';
scala(s);
strcpy(vapp,s);
strcpy(s,t);
strcpy(t,vapp);
}
else
{
result[cont]=t[strlen(t)-1];
fine[contf]=s[0];
scala(s);
contf++;
cont++;
t[strlen(t)-1]='\0';
}
}
for(contf=contf-1;contf>=0;contf--)
{
result[cont]=fine[contf];
cont++;
}
result[cont]='\0';
}
char s[MAXL];
char t[MAXL];
char r[2*MAXL];
int main() {
FILE *fr, *fw;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(2 == fscanf(fr, "%s %s", s, t));
crossover(s, t, r);
fprintf(fw, "%s\n", r);
fclose(fr);
fclose(fw);
return 0;
}