Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- int Expo(int a, int n, int m) {
- a %= m;
- int ans=0;
- ans=1;
- while(n>0) {
- if(n%2 == 1)
- ans = (ans*a) % m;
- a = (a*a) % m;
- n/=2;
- }
- return ans;
- }
- int Choose(int a, int b) {
- int p=(1e6);
- int q=(1e9 + 7);
- vector<int> arr(p+1);
- vector<int> ar(p+1);
- arr[0] = 1;
- for(int i=1;i<=p;i++)
- arr[i] = (arr[i-1] * i) % q;
- ar[p] = Expo(arr[p], q-2, q);
- for(int i=p;i>=1;i--)
- ar[i-1] = (ar[i] * i) % q;
- a = ((arr[a] * ar[b]) % q) * (ar[a-b] % q);
- a%=q;
- return a;
- }
- string ToBin(int b) {
- if (b==0)
- return "0";
- else if (b==1)
- return "1";
- else if (b%2 == 0)
- return ToBin(b/2) + "0";
- else
- return ToBin(b/2) + "1";
- }
- signed main() {
- int n=0;
- int a=0;
- int b=0;
- int i=0;
- bool check=false;
- cin>>n;
- deque<int> deq;
- for(i=0;i<n;i++) {
- cin>>a;
- deq.push_back(a);
- if(i!=0)
- if(deq.at(i) != deq.at(i-1))
- check=true;
- }
- if(n==1)
- cout<<1<<endl;
- else if(a == 0)
- cout<<0<<endl;
- else if(!check) {
- b = (deq.at(0));
- string s;
- s=ToBin(b);
- sort(s.begin(), s.end());
- for(i=0;i < s.length();i++) {
- if(s[i] == '1')
- break;
- }
- b=(s.length() - i);
- vector<int> vec(n-1);
- for(i=0;i<n-1;i++) {
- vec.at(i) = Choose(n-2, i);
- }
- int ans=0;
- for(i=0;i<n-1;i++) {
- int curr=1;
- for(a=0;a<(i+2);a++) {
- curr*=b;
- curr%=((int)(1e9 + 7));
- }
- vec.at(i) *= curr;
- vec.at(i)%=((int)(1e9 + 7));
- ans+=vec.at(i);
- ans%=((int)(1e9 + 7));
- }
- cout<<ans<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement