Pagini recente » Cod sursa (job #2200323) | Cod sursa (job #1426145) | Cod sursa (job #780134) | Cod sursa (job #1370706) | Cod sursa (job #396829)
Cod sursa(job #396829)
#include<fstream>
#include<string>
using namespace std;
void fnReadSubsir(void);
void fnDyn(void);
void fnWriteSubsir(void);
int fnMax(int nFirst,int nSecond);
bool fnTest(int nX,int nY);
struct sPin {
int nMatch;
int nBool;
};
int nA[502],nB[502];
int nSizeA,nSizeB;
int nDyn[502][502],nMxVal,nFreq;
int nPinLine[502];
int main(void) {
fnReadSubsir();
fnDyn();
fnWriteSubsir();
return 0;
}
void fnReadSubsir(void) {
ifstream ifSubsir("subsir.in");
char chA[502],chB[502];
int nX;
ifSubsir>>chA>>chB;
nSizeA=strlen(chA);
nSizeB=strlen(chB);
ifSubsir.close();
for (nX=1;nX<=nSizeA;++nX)
nA[nX]=chA[nX-1]-'a'+1;
for (nX=1;nX<=nSizeB;++nX)
nB[nX]=chB[nX-1]-'a'+1;
}
void fnDyn(void) {
int nX,nY,nPut=0;
for (nX=1;nX<=nSizeA;++nX)
for (nY=1;nY<=nSizeB;++nY)
if (nA[nX]==nB[nY]) {
nDyn[nX][nY]=nDyn[nX-1][nY-1]+1;
if (nDyn[nX][nY]>nMxVal) {
nMxVal=nDyn[nX][nY];
nFreq=1;
} else if (nDyn[nX][nY]==nMxVal && fnTest(nX,nY) && nX!=1 && !nPinLine[nX])
++nFreq;
nPinLine[nX]=1;
} else
nDyn[nX][nY]=fnMax(nDyn[nX][nY-1],nDyn[nX-1][nY]);
}
void fnWriteSubsir(void) {
ofstream ofSubsir("subsir.out");
ofSubsir<<nFreq;
ofSubsir.close();
}
int fnMax(int nFirst,int nSecond) {
if (nFirst>nSecond) return nFirst;
return nSecond;
}
bool fnTest(int nX,int nY) {
int nZ;
bool bOk=false;
for (nZ=1;nZ<=nY;++nZ)
if (nDyn[nZ][nY]!=nDyn[nZ-1][nY]) {
bOk=true;
break;
}
if (bOk) return true;
return false;
}