/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 2ms 580.0 KiB
#2 Accepted 1ms 580.0 KiB
#3 Accepted 3ms 576.0 KiB
#4 Accepted 3ms 576.0 KiB
#5 Accepted 4ms 624.0 KiB
#6 Accepted 5ms 616.0 KiB
#7 Accepted 8ms 756.0 KiB
#8 Accepted 5ms 532.0 KiB
#9 Accepted 2ms 532.0 KiB
#10 Accepted 5ms 672.0 KiB
#11 Accepted 2ms 592.0 KiB
#12 Accepted 5ms 576.0 KiB
#13 Accepted 2ms 596.0 KiB
#14 Accepted 4ms 604.0 KiB
#15 Accepted 8ms 748.0 KiB

Code

/*Rabbi Zidni Eilmaa*/

// We are open. We are looking for SHOTRUJ...
 
#include<bits/stdc++.h>
using namespace std;
 
typedef long long int ll;
typedef long double ld;
typedef string str;
typedef vector<ll> vll;
typedef vector<pair<ll, ll>> vpl;
typedef set<ll> sll;
typedef map<ll,ll> mll;
typedef pair<int,int> pint;
typedef pair<ll,ll> pll;
double pi = acos(-1.0);
#define debug(x) cout<<#x<<" "<<x<<endl;
#define loop for(int i=1; i<=n; i++)
#define all(a) (a).begin(), (a).end()
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define min4(a,b,c,d) min(a,min(b,min(c,d)))
#define max4(a,b,c,d) max(a,max(b,max(c,d)))
#define forn(i, n) for(int i=1; i<=(int)n; i++)
#define ANS cout << ans << "\n"
#define PY cout << "YES\n"
#define PN cout << "NO\n" 

int mod = 1e9 + 7;

void init(){
    
}

ll BigMod(ll a, ll p, ll m){
    ll ans =1;
    while(p>0){
        if(p%2==1){
            ans=(ans*a)%m;
        }

        p/=2;
        a=(a*a)%m;
    }

    return (ans % mod);
}

vector<ll> facto(5005, -1);

ll fact(ll n){
    if(facto[n] != -1) return facto[n];
    if(n<2) return 1;
    return facto[n] = ((n * fact(n-1)) % mod);
}

ll nCr(ll n, ll r){
    ll ans = fact(n);
    ans = (ans * BigMod(fact(r), mod-2, mod)) % mod;
    ans = (ans * BigMod(fact(n-r), mod-2, mod)) % mod;
    return ans;
}

void solve()
{
    ll n, k;
    cin >> n >> k;
    ll x = 0;
    for(int i=1; i<=n; i++) {
        int a;
        cin >> a;
        x += a;
    }

    if(x < k) {
        cout << "0\n";
        return;
    }

    ll ans = BigMod(2, n-x, mod);
    ll p = 0;

    for(int i=k; i<=x; i++) {
        ll cur = nCr(x, i);
        // cout << i << ' ' << cur << endl;
        p = (p + cur) % mod;
    }

    ans = (ans * p) % mod;
    cout << ans - 1 << '\n';

    return;
}

int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
 
    init();
    int t = 1;
    cin >> t;
    for(int i=1; i<=t; i++){
        // cout << "Case " << i << ": ";
        solve();
    }
 
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1093 Number of Ways (Easy version)
Contest
Brain Booster #5
Language
C++20 (G++ 13.2.0)
Submit At
2024-09-05 16:33:50
Judged At
2024-10-03 13:07:06
Judged By
Score
100
Total Time
8ms
Peak Memory
756.0 KiB