Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define scanf___Am_I_a_joke_to_you ios_base :: sync_with_stdio(false);
- #define ll long long
- #define MAXN 200007
- #define MOD 1000000007
- #define MODN 11
- ll fac[MAXN];
- ll power(ll x, ll y, ll p)
- {
- ll res = 1;
- x = x % p;
- while (y > 0)
- {
- if (y & 1) res = (res*x) % p;
- y = y>>1;
- x = (x*x) % p;
- }
- return res;
- }
- ll modInverse(ll n, ll p) {return power(n, p-2, p);}
- ll nCrModPFermat(ll n, ll p)
- {
- fac[0] = 1;
- for (ll i=1 ; i<=n; i++)
- fac[i] = fac[i-1]*i%p;
- }
- int main ()
- {
- scanf___Am_I_a_joke_to_you
- int test_case; cin >> test_case;
- while(test_case--)
- {
- ll n, cntStr1 = 0, cntstr2 = 0, subSum = 0, Start, sum = 0, End; cin >> n;
- string str1, str2; double dp[MAXN] = {0};
- cin >> str1 >> str2;
- for (ll i = 0; i<str1.size(); i++){if (str1[i] == '1') cntStr1++;if (str2[i] == '1') cntstr2++;}
- if (cntStr1 < cntstr2) swap(cntStr1, cntstr2);
- End = min(n - cntStr1, cntstr2); Start = cntStr1 - cntstr2; End = Start + (2 * End);
- nCrModPFermat(n, MOD);
- for (ll i = Start; i <= End; i+=2)
- {
- ll res = (fac[n]* modInverse(fac[i], MOD) % MOD * modInverse(fac[n-i], MOD) % MOD) % MOD;
- sum += res;
- sum %= MOD;
- }
- cout << sum << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement