Pagini recente » Cod sursa (job #6931) | Cod sursa (job #3284418) | Cod sursa (job #2893724) | Cod sursa (job #3249949) | Cod sursa (job #396567)
Cod sursa(job #396567)
#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();
}