Advertisement
Guest User

D

a guest
Aug 9th, 2013
1,001
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 2000000, mod = 1000000007;
  6.  
  7. int cnt[2], target;
  8. long long fact[N];
  9.  
  10. #define forn(i,n) for(int i = 0; i < (int) n; i++)
  11. #define sz(a) (int)(a).size()
  12.  
  13. inline bool read() {
  14. return (cin >> cnt[0] >> cnt[1] >> target);
  15. }
  16.  
  17. inline long long bpow(long long v, int power) {
  18. if (power == 0) return 1;
  19. if ((power & 1) == 0) {
  20. long long r = bpow(v, power >> 1);
  21. return (r * r) % mod;
  22. }
  23. return (bpow(v, power - 1) * v) % mod;
  24. }
  25.  
  26. inline int getC(int n, int k) {
  27. long long nom = fact[n];
  28. long long den = (fact[n-k] * fact[k]) % mod;
  29. return (nom * bpow(den, mod - 2)) % mod;
  30. }
  31.  
  32. int calculate() {
  33. if (cnt[1] == 0) {
  34. if (cnt[0] % 2 != target)
  35. return 1;
  36. else
  37. return 0;
  38. }
  39. if (cnt[0] == 0) {
  40. if (cnt[1] > 1) {
  41. if (target == 0)
  42. return 1;
  43. else
  44. return 0;
  45. } else {
  46. if (target == 1)
  47. return 1;
  48. else
  49. return 0;
  50. }
  51. }
  52. int answer = 0;
  53. for(int i = 0; i <= cnt[0]; i++) {
  54. int total = cnt[0] + cnt[1] - 1 - i;
  55. if (total > 0) {
  56. if (i % 2 == target) {
  57. answer += getC(total, cnt[1] - 1);
  58. if (answer >= mod) answer -= mod;
  59. }
  60. } else {
  61. if (i % 2 != target) {
  62. answer += getC(total, cnt[1] - 1);
  63. if (answer >= mod) answer -= mod;
  64. }
  65. }
  66. }
  67. return answer;
  68. }
  69.  
  70. inline void solve() {
  71. fact[0] = 1;
  72. forn(i, N) {
  73. if (!i) continue;
  74. fact[i] = (fact[i-1] * i) % mod;
  75. }
  76. cout << calculate() << endl;
  77. }
  78. int main() {
  79. while (read())
  80. solve();
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement