Pagini recente » Cod sursa (job #298614) | Cod sursa (job #1252648) | Cod sursa (job #2006549) | Cod sursa (job #2990946) | Cod sursa (job #1033247)
#include <cstdio>
#include <cstring>
#include <fstream>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#define f first
#define s second
#define mp make_pair
using namespace std;
const int kmod = 666013;
pair<int, int> dp[505][505];
int main(){
ifstream in("subsir.in");
ofstream out("subsir.out");
string a, b;
in >> a >> b;
for(int i = 0; i <= 500; ++i)
dp[i][0] = dp[0][i] = mp(0, 1);
for(int i = 1; i <= a.size(); ++i)
for(int j = 1; j <= b.size(); ++j)
if(a[i - 1] == b[j - 1]){
dp[i][j].f = dp[i - 1][j - 1].f + 1;
dp[i][j].s = dp[i - 1][j - 1].s;
}
else if(dp[i - 1][j].f == dp[i][j - 1].f){
dp[i][j].f = dp[i - 1][j].f;
dp[i][j].s = (dp[i - 1][j].s + dp[i][j - 1].s) % kmod;
if(dp[i - 1][j].f == dp[i - 1][j - 1].f)
dp[i][j].s = (dp[i][j].s - dp[i - 1][j - 1].s + kmod) % kmod;
}
else if(dp[i - 1][j].f > dp[i][j - 1].f){
dp[i][j].f = dp[i - 1][j].f;
dp[i][j].s = dp[i - 1][j].s;
}
else{
dp[i][j].f = dp[i][j - 1].f;
dp[i][j].s = dp[i][j - 1].s;
}
out << dp[a.size()][b.size()].s;
return 0;
}