Pagini recente » Cod sursa (job #258203) | Cod sursa (job #1827563) | Cod sursa (job #218363) | Cod sursa (job #1804075) | Cod sursa (job #2581922)
/*
https://www.infoarena.ro/problema/subsir
*/
#include <bits/stdc++.h>
#include <fstream>
#define MOD 666013
using namespace std;
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
ifstream fin("subsir.in");
ofstream fou("subsir.out");
char first[503];
char second[503];
unsigned long long dp[503][503];
unsigned long long dp2[503][503];
fin >> first >> second;
int n = strlen(first);
int m = strlen(second);
int i, j;
for (i = 0; i <= m; i++) {
dp[0][i] = 0LL;
dp2[0][i] = 1LL;
}
for (i = 0; i <= n; i++) {
dp[i][0] = 0LL;
dp2[i][0] = 1LL;
}
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (second[i] == first[j]) {
dp[i + 1][j + 1] = 1 + dp[i][j];
dp2[i + 1][j + 1] = dp2[i][j];
}
else{
dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
dp2[i+ 1][j + 1] = 0LL;
if(dp[i + 1][j] == dp[i + 1][j + 1]){
dp2[i + 1][j + 1] = dp2[i + 1][j] % MOD;
}
if(dp[i][j + 1] == dp[i + 1][j + 1]){
dp2[i + 1][j + 1] = ( dp2[i + 1][j + 1] + dp2[i][j + 1] )% MOD;
}
if(dp[i][j] == dp[i + 1][j + 1]){
dp2[i + 1][j + 1] = ( dp2[i + 1][j + 1] - dp2[i][j] + MOD) %MOD;
}
}
}
}
fou << dp2[m][n];
fin.close();
fou.close();
return 0;
}