Mam problem z zadaniem z VI OIG pod tytułem: "Dwa słowa" Wywala mi limi czasowy na testach 5 7 9 przez co dostaje 66/100. Chciałem się Was spytać co robię źle, jak powinien wyglądać optymalny algorytm?
Oto mój kod:
#include <iostream>
#include <cstdio>
using namespace std;
int porownaj(char a[],char b[],int n, int indeks)//zwraca indeks wystepowania pierwszej sprzecznosci
{
for(int i=indeks;i<n;i++)
if(a[i]!=b[i])
return i;
return n;//oba teksty są takie same
}
int main(int argc, char *argv[])
{
int n;//dlugosc każdego ze słów
int z;//liczba dokonanych zamian
int p1,p2;//zmienne pomocnicze wykorzystywane w pętli while
int wynik;
scanf("%d",&n);
char a[n],b[n];//a-slowo pierwsze;b-slowo drugie
scanf("%s",a);
scanf("%s",b);
scanf("%d",&z);
int id = porownaj(a,b,n,0);//id-indeks roznicy;
if(id==n)
wynik=0;
else if(a[id]<b[id])
wynik=2;
else
wynik=1;
while(z--)
{
scanf("%d%d",&p1,&p2);
swap(a[p1],b[p2]);
if(p1 <= id || p2 <= id)
{
id=porownaj(a,b,n,min(p1,p2));
if(id==n)
wynik=0;
else if(a[id]<b[id])
wynik=2;
else
wynik=1;
}
printf("%d\n",wynik);
}
return 0;
}