Pagini recente » Cod sursa (job #2515478) | Cod sursa (job #958065) | Cod sursa (job #1118172) | Cod sursa (job #1851011) | Cod sursa (job #309643)
Cod sursa(job #309643)
using namespace std;
#include <cstdio>
#include <algorithm>
#define Nmax 1000010
int T;
int pi[Nmax];
char s1[Nmax], s2[Nmax];
int prefix(char s1[], char s2[]){
//cel mai lung prefix a lui s1 care este sufix a lui s2
int i, n1 = strlen(s1) - 1, n2 = strlen(s2) - 1, p = 0;
//memset(pi, 0, sizeof(pi));
pi[1] = 0;
for(i = 2; i <= n2; i++){
while( p && s1[p + 1] != s2[i] ) p = pi[p];
if( s1[p + 1] == s2[i] ) p++;
pi[i] = p;
}
return n1 + n2 - pi[n2];
}
int main(){
FILE *f = fopen("superstring.in", "r");
FILE *g = fopen("superstring.out", "w");
for(fscanf(f,"%d\n", &T), s1[0] = s2[0] = '0'; T ; T--){
fscanf(f,"%s%s", s1 + 1, s2 + 1);
fprintf(g,"%d\n", min( prefix(s1, s2), prefix(s2, s1) ));
}
fclose(f);
fclose(g);
return 0;
}