/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 540.0 KiB
#2 Accepted 1ms 540.0 KiB
#3 Accepted 2ms 540.0 KiB
#4 Accepted 2ms 488.0 KiB
#5 Accepted 2ms 492.0 KiB
#6 Accepted 2ms 376.0 KiB
#7 Accepted 2ms 740.0 KiB
#8 Accepted 2ms 544.0 KiB
#9 Accepted 1ms 328.0 KiB
#10 Accepted 2ms 492.0 KiB
#11 Accepted 2ms 352.0 KiB
#12 Accepted 2ms 452.0 KiB
#13 Accepted 2ms 500.0 KiB
#14 Accepted 2ms 448.0 KiB
#15 Accepted 2ms 496.0 KiB

Code

#include<bits/stdc++.h>
using namespace std;
const long long M=3e5+10,MOD=1e9+7;
typedef long long ll;
long long bigmod ( long long a, long long p, long long m )
{
    long long res =1;
    long long x = a;

    while ( p )
    {
        if ( p & 1 ) //p is odd
        {
            res = ( res * x )%m;
        }
        x = ( x * x )%m;
        p = p >> 1;
    }

    return res;
}
ll nCrMod(ll n, ll r) {
    ll Res = 1;
    ll rem_sum=0;
    for (ll i = 0; i < r; ++i) {
        rem_sum=(rem_sum + Res)%MOD;
        Res =(Res * (n - i))%MOD;
        Res = (Res *bigmod(i + 1, MOD - 2,MOD))%MOD;
    }
    return rem_sum;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        ll n,k;
        cin>>n>>k;
        ll sum=0;
        for(int i=1;i<=n;i++){
            int a;
            cin>>a;
            sum+=a;
        }
        if(k>sum){
            cout<<"0\n";
            continue;
        }
        ll pos_way=bigmod(2,n-sum,MOD)%MOD;
        ll total_pos=bigmod(2,sum,MOD)%MOD;
        ll make_way=nCrMod(sum,k)%MOD;
        ll remainig=(total_pos-make_way+MOD)%MOD;
        ll ans=(pos_way * remainig)%MOD;
        ans=(ans-1LL+MOD)%MOD;
        cout<<ans<<"\n";
    
    }


   
   return 0;
 
}

Information

Submit By
Type
Submission
Problem
P1093 Number of Ways (Easy version)
Language
C++20 (G++ 13.2.0)
Submit At
2024-08-21 13:46:57
Judged At
2024-08-21 13:46:57
Judged By
Score
100
Total Time
2ms
Peak Memory
740.0 KiB