Cod sursa(job #2440298)

Utilizator StivanQFabian Patras StivanQ Data 18 iulie 2019 03:29:32
Problema Cel mai lung subsir comun Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.8 kb
#include <fstream>
#include <iostream>
#include <conio.h>
using namespace std;

ifstream in("cmlsc.in");
ofstream out("cmlsc.out");


int* cmlsc (int lungime1, int lungime2, int* vector1, int* vector2,
		   int* lungimeMax) {

    *lungimeMax = 0;

    int* vectorMax;
    int* vectorCur;

    int lungimeCur = 0;;
    int pos1 = 0, pos2 = 0;
    int first = 1;

    while(pos1 != lungime1) {
		if (vector1[pos1] == vector2[pos2]) {
			if (first == 1) {
				vectorCur = vector1 + pos1;
				first = 0;
			}
			lungimeCur++;
			pos1++;
			pos2++;

		} else {
			if (lungimeCur > *lungimeMax) {
				vectorMax = vectorCur;
				*lungimeMax = lungimeCur;
			}
			lungimeCur = 0;
			if(first == 0) {
				pos2 = 0;
				first = 1;
			} else {
				if (pos2 == lungime2 - 1) {
					pos2 = 0;
					pos1++;
				} else {
					pos2++;
				}

			}
		}

    }

	if (lungimeCur > *lungimeMax) {
		vectorMax = vectorCur;
		*lungimeMax = lungimeCur;
    }


    return vectorMax;
}



int main() {

    int lungime1;
    int lungime2;
    in >> lungime1;
    cout << lungime1;
    in >> lungime2;

    int* vector1 = new int[lungime1];
    int* vector2 = new int[lungime2];

    int i;
    for (i = 0; i < lungime1; i++) {
        in >> vector1[i];
        cout << vector1[i] << "\n";
    }

    cout << "|~~~~~~|\n";

    for (i = 0; i < lungime2; i++) {
        in >> vector2[i];
        cout << vector2[i] << "\n";
    }

    cout << "|~~~~~~|\n";

    int lungimeMax;
    int* vectorMaxMain;

    vectorMaxMain = cmlsc(lungime1, lungime2, vector1, vector2, &lungimeMax);

    out << lungimeMax << "\n";
    for (i = 0; i < lungimeMax - 1; i++) {
		out << vectorMaxMain[i] << " ";
    }
    out << vectorMaxMain[lungimeMax - 1] << "\n";

    return 0;
}