Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// solution : https://pastebin.com/1UWbv6PT
- #include<bits/stdc++.h>
- #define int long long
- using namespace std;
- const int N = 2004, MOD = 1e9 + 7;
- int n, P, Q, numAnswer[N];
- char a[N], b[N];
- int Equal[N], Diff[N], numEqual, numDiff;
- int C[N][N];
- void prepare() {
- for (int i = 0; i <= n; ++i) for (int j = 0; j <= i; ++j)
- C[i][j] = (j == 0 || j == i) ? 1 : (C[i-1][j] + C[i-1][j-1]) % MOD;
- for (int i = 1; i <= n; ++i) {
- if (a[i] == b[i]) Equal[++numEqual] = i;
- else Diff[++numDiff] = i;
- }
- }
- int dp[2][N][N];
- int Mul(int a, int b, int c) { return ( (a * b) % MOD * c ) % MOD; }
- void sol() {
- prepare();
- dp[0][0][0] = 1;
- for (int i = 1; i <= numEqual; ++i) for (int j = 0; j <= i; ++j)
- dp[0][i][j] = ( dp[0][i-1][j] + (j > 0) * dp[0][i-1][j-1] * (numAnswer[Equal[i]]-1) ) % MOD;
- dp[1][0][0] = 1;
- for (int i = 1; i <= numDiff; ++i) for (int j = 0; j <= i; ++j)
- dp[1][i][j] = ( dp[1][i-1][j] + (j > 0) * dp[1][i-1][j-1] * (numAnswer[Diff[i]]-2) ) % MOD;
- int res = 0;
- for (int i = 0; i <= numEqual; ++i) {
- int j = numEqual - i;
- int remain1 = P - j, remain2 = Q - j, sum = remain1 + remain2;
- if (remain1 < 0 || remain2 < 0) continue;
- if (numDiff < remain1 + remain2) continue;
- res += Mul( dp[0][numEqual][i], dp[1][numDiff][numDiff-sum], C[sum][remain1] );
- res %= MOD;
- }
- cout << res << '\n';
- }
- #undef int
- int main() {
- #define int long long
- ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- if (fopen("input.txt", "r")) {
- freopen("input.txt", "r", stdin);
- }
- else if (fopen("multchoice.inp", "r")) {
- freopen("multchoice.inp", "r", stdin);
- freopen("multchoice.out", "w", stdout);
- }
- cin >> n >> P >> Q;
- for (int i = 1; i <= n; ++i) cin >> a[i];
- for (int i = 1; i <= n; ++i) cin >> b[i];
- for (int i = 1; i <= n; ++i) {
- char c;
- for (int j = 1; j <= 5; ++j) {
- cin >> c;
- if (c != '.') numAnswer[i]++;
- }
- }
- sol();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement