Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int prefix(char *s1, char *s2, int l1, int l2) {
- static int k, p[2000002] = { 0 }, ind;
- static char concat[2000002] = { '0' };
- ind = 1; k = 0;
- for (int i = 0; i <= (l1-1); i++) {
- concat[ind] = s1[i];
- ind++;
- }
- concat[ind] = ' ';
- ind++;
- for (int i = 0; i <= (l2-1); i++) {
- concat[ind] = s2[i];
- ind++;
- }
- concat[ind] = '\0';
- int l = strlen(concat)-1;
- for (int i = 2; i <= l; i++) {
- while ((k > 0) && (concat[k+1] != concat[i])) {
- k = p[k];
- }
- if (concat[k+1] == concat[i]) {
- k++;
- }
- p[i] = k;
- }
- for (int i = 0; i < l; i++) {
- concat[i] = '0';
- p[i] = 0;
- }
- return k;
- }
- int main(void) {
- static char str1[1000001], str2[1000001];
- char k;
- int i = 0;
- while ((k=getchar()) != '\n') {
- if (k != ' ') {
- str1[i] = k;
- i++;
- }
- }
- str1[i] = '\0';
- i = 0;
- while ((k = getchar()) != '\n') {
- if (k != ' ') {
- str2[i] = k;
- i++;
- }
- }
- str2[i] = '\0';
- int pref1 = 0, pref2 = 0,minimum=0;
- if (strlen(str1) > strlen(str2)) {
- minimum = strlen(str2);
- }
- else {
- minimum = strlen(str1);
- }
- pref1 = prefix(str1, str2, strlen(str1), strlen(str2));
- if (pref1 > minimum) {
- printf("%d ", minimum);
- }
- else {
- printf("%d ", pref1);
- }
- pref2 = prefix(str2, str1, strlen(str2), strlen(str1));
- if (pref2 > minimum) {
- printf("%d", minimum);
- }
- else {
- printf("%d", pref2);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement