Advertisement
Dynonychus

Old Code

Jan 5th, 2024
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3.  
  4. using namespace std;
  5.  
  6. #include <bits/stdc++.h>
  7. #define int long long
  8.  
  9. using namespace std;
  10.  
  11. int Expo(int a, int n, int m) {
  12. a %= m;
  13.  
  14. int ans=0;
  15. ans=1;
  16.  
  17. while(n>0) {
  18. if(n%2 == 1)
  19. ans = (ans*a) % m;
  20.  
  21. a = (a*a) % m;
  22.  
  23. n/=2;
  24. }
  25.  
  26. return ans;
  27. }
  28.  
  29. int Choose(int a, int b) {
  30.  
  31. int p=(1e6);
  32. int q=(1e9 + 7);
  33.  
  34. vector<int> arr(p+1);
  35. vector<int> ar(p+1);
  36.  
  37.  
  38. arr[0] = 1;
  39.  
  40. for(int i=1;i<=p;i++)
  41. arr[i] = (arr[i-1] * i) % q;
  42.  
  43. ar[p] = Expo(arr[p], q-2, q);
  44.  
  45. for(int i=p;i>=1;i--)
  46. ar[i-1] = (ar[i] * i) % q;
  47.  
  48. a = ((arr[a] * ar[b]) % q) * (ar[a-b] % q);
  49. a%=q;
  50.  
  51. return a;
  52. }
  53.  
  54. string ToBin(int b) {
  55. if (b==0)
  56. return "0";
  57.  
  58. else if (b==1)
  59. return "1";
  60.  
  61. else if (b%2 == 0)
  62. return ToBin(b/2) + "0";
  63.  
  64. else
  65. return ToBin(b/2) + "1";
  66. }
  67.  
  68. signed main() {
  69. int n=0;
  70. int a=0;
  71. int b=0;
  72. int i=0;
  73. bool check=false;
  74.  
  75. cin>>n;
  76. deque<int> deq;
  77.  
  78. for(i=0;i<n;i++) {
  79. cin>>a;
  80. deq.push_back(a);
  81.  
  82. if(i!=0)
  83. if(deq.at(i) != deq.at(i-1))
  84. check=true;
  85. }
  86.  
  87. if(n==1)
  88. cout<<1<<endl;
  89.  
  90. else if(a == 0)
  91. cout<<0<<endl;
  92.  
  93. else if(!check) {
  94. b = (deq.at(0));
  95. string s;
  96.  
  97. s=ToBin(b);
  98.  
  99. sort(s.begin(), s.end());
  100.  
  101. for(i=0;i < s.length();i++) {
  102. if(s[i] == '1')
  103. break;
  104. }
  105.  
  106. b=(s.length() - i);
  107.  
  108. vector<int> vec(n-1);
  109.  
  110. for(i=0;i<n-1;i++) {
  111. vec.at(i) = Choose(n-2, i);
  112. }
  113.  
  114. int ans=0;
  115. for(i=0;i<n-1;i++) {
  116. int curr=1;
  117. for(a=0;a<(i+2);a++) {
  118. curr*=b;
  119. curr%=((int)(1e9 + 7));
  120. }
  121.  
  122. vec.at(i) *= curr;
  123. vec.at(i)%=((int)(1e9 + 7));
  124.  
  125. ans+=vec.at(i);
  126. ans%=((int)(1e9 + 7));
  127. }
  128.  
  129. cout<<ans<<endl;
  130. }
  131.  
  132. return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement