Advertisement
WhoNayem

Untitled

Dec 13th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define scanf___Am_I_a_joke_to_you ios_base :: sync_with_stdio(false);
  4. #define ll long long
  5. #define MAXN 200007
  6. #define MOD 1000000007
  7. #define MODN 11
  8.  
  9.  
  10. ll fac[MAXN];
  11.  
  12. ll power(ll x, ll y, ll p)
  13. {
  14. ll res = 1;
  15. x = x % p;
  16.  
  17. while (y > 0)
  18. {
  19. if (y & 1) res = (res*x) % p;
  20. y = y>>1;
  21. x = (x*x) % p;
  22. }
  23. return res;
  24. }
  25.  
  26. ll modInverse(ll n, ll p) {return power(n, p-2, p);}
  27.  
  28. ll nCrModPFermat(ll n, ll p)
  29. {
  30. fac[0] = 1;
  31. for (ll i=1 ; i<=n; i++)
  32. fac[i] = fac[i-1]*i%p;
  33. }
  34.  
  35. int main ()
  36. {
  37. scanf___Am_I_a_joke_to_you
  38.  
  39. int test_case; cin >> test_case;
  40. while(test_case--)
  41. {
  42. ll n, cntStr1 = 0, cntstr2 = 0, subSum = 0, Start, sum = 0, End; cin >> n;
  43. string str1, str2; double dp[MAXN] = {0};
  44. cin >> str1 >> str2;
  45.  
  46. for (ll i = 0; i<str1.size(); i++){if (str1[i] == '1') cntStr1++;if (str2[i] == '1') cntstr2++;}
  47. if (cntStr1 < cntstr2) swap(cntStr1, cntstr2);
  48.  
  49. End = min(n - cntStr1, cntstr2); Start = cntStr1 - cntstr2; End = Start + (2 * End);
  50.  
  51. nCrModPFermat(n, MOD);
  52.  
  53. for (ll i = Start; i <= End; i+=2)
  54. {
  55. ll res = (fac[n]* modInverse(fac[i], MOD) % MOD * modInverse(fac[n-i], MOD) % MOD) % MOD;
  56. sum += res;
  57. sum %= MOD;
  58. }
  59. cout << sum << endl;
  60. }
  61.  
  62. return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement