Come velocizzare crossover in c?

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;
}

Invece di lavorare su array di caratteri con strcpy & co, prova a riscrivere l’algoritmo lavorando con gli indici o, forse ancora più facile da scrivere, con i puntatori all’inizio e alla fine delle due stringhe su cui stai lavorando in un determinato momento.

Guarda anche qui

Dario

1 Mi Piace