Cod sursa(job #396567)

Utilizator darrenRares Buhai darren Data 15 februarie 2010 16:43:06
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<fstream>
#include<string>
using namespace std;

void fnReadSubsir(void);
void fnDynamic(void);
void fnWriteSubsir(void);

int nFirstArray[502],nSecondArray[502];
int nFirstSize,nSecondSize;
int nDynamic[502][502],nPinLine[502],nPinColumn[502];
int nMaxDynamic,nFrequency;

int main(void) {
	fnReadSubsir();
	fnDynamic();
	fnWriteSubsir();
	return 0;
}

void fnReadSubsir(void) {
	ifstream ifSubsir("subsir.in");
	char chFirstArray[502],chSecondArray[502];
	int nX;
	
	ifSubsir>>chFirstArray>>chSecondArray;
	nFirstSize=strlen(chFirstArray);
	nSecondSize=strlen(chSecondArray);
	ifSubsir.close();
	
	for (nX=1;nX<=nFirstSize;++nX) 
		nFirstArray[nX]=chFirstArray[nX-1]-'a'+1;
	for (nX=1;nX<=nSecondSize;++nX) 
		nSecondArray[nX]=chSecondArray[nX-1]-'a'+1;
}

void fnDynamic(void) {
	int nX,nY;
	for (nX=1;nX<=nFirstSize;++nX)
		for (nY=1;nY<=nSecondSize;++nY)
			if (nFirstArray[nX]==nSecondArray[nY]) {
				nDynamic[nX][nY]=nDynamic[nX-1][nY-1]+1;
				if (nDynamic[nX][nY]>nMaxDynamic) {
					nMaxDynamic=nDynamic[nX][nY];
					nFrequency=1;
				} else if (nDynamic[nX][nY]==nMaxDynamic && !nPinLine[nX] && !nPinColumn[nY])
					++nFrequency;
				nPinLine[nX]=1;
				nPinColumn[nY]=1;
			} else if (nDynamic[nX-1][nY]>nDynamic[nX][nY-1])
				nDynamic[nX][nY]=nDynamic[nX-1][nY];
				else
					nDynamic[nX][nY]=nDynamic[nX][nY-1];
}

void fnWriteSubsir(void) {
	ofstream ofSubsir("subsir.out");
	ofSubsir<<nFrequency;
	ofSubsir.close();
}