/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 4ms 1.227 MiB
#2 Accepted 4ms 1.277 MiB
#3 Accepted 6ms 1.273 MiB
#4 Accepted 6ms 1.27 MiB
#5 Accepted 6ms 1.285 MiB
#6 Accepted 6ms 1.238 MiB
#7 Accepted 7ms 1.297 MiB
#8 Accepted 6ms 1.164 MiB
#9 Accepted 6ms 1.285 MiB
#10 Accepted 6ms 1.309 MiB
#11 Accepted 6ms 1.305 MiB
#12 Accepted 6ms 1.289 MiB
#13 Accepted 6ms 1.301 MiB
#14 Accepted 6ms 1.285 MiB
#15 Accepted 7ms 1.309 MiB
#16 Accepted 90ms 1.316 MiB
#17 Accepted 86ms 1.664 MiB
#18 Accepted 93ms 2.051 MiB
#19 Accepted 125ms 2.051 MiB
#20 Accepted 59ms 2.051 MiB
#21 Accepted 88ms 1.66 MiB

Code

#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define dbg(a,b,c,d) cerr<<a<<"  "<<b<<"  "<<c<<"  "<<d<<endl;
#define kill(a) {cout<<a<<endl;continue;}
#define KILL(a) {cout<<a<<endl;return 0;}
#define debug cerr<<"Error Found"<<endl;
#define mem(a,b) memset(a,b,sizeof(a))
#define lcm(a, b) (a/__gcd(a,b))*b
#define w(t) cin>>t;while(t--)
#define pi  2 * acos(0.0)
#define endl "\n"
int t, cs = 0;
const int mxn = 2e5 + 3, mod = 1e9 + 7;
int fact[mxn];
int power(int base, int po)
{
    int res = 1;
    while(po)
    {
        if(po & 1)res = 1LL * res * base % mod;
        base = 1LL * base * base % mod, po /= 2;
    }
    return res;
}
void pre()
{
    fact[0] = 1;
    for(int i = 1; i < mxn; i++)fact[i] = 1LL * fact[i - 1] * i % mod;
}
int ncr(int n, int r)
{
    int res = fact[n];
    res = 1LL * res * power(fact[n - r], mod - 2) % mod;
    res = 1LL * res * power(fact[r], mod - 2) % mod;
    return res;
}
int32_t main()
{
    pre();
    //fast
    w(t)
    {
        int n, x;
        cin >> n >> x;
        int ar[n];
        int sum = 0;
        for(int i = 0; i < n; i++)cin >> ar[i], sum += ar[i];
        int ans = 0;
        if(x > sum)kill(ans);
        ans = power(2, n - sum);
        ans--;
        int tmp = 0;

        for(int i = x; i < sum; i++)
        {
            tmp += ncr(sum, i), tmp %= mod;
        }
        int ex = (ans + tmp) % mod;
        ans = 1LL * ans * tmp % mod, ans %= mod;
        ans += ex, ans %= mod;
        cout << ans << endl;

    }
}

Information

Submit By
Type
Submission
Problem
P1094 Number of ways (Hard version)
Language
C++17 (G++ 13.2.0)
Submit At
2024-11-07 18:22:01
Judged At
2024-11-11 02:23:06
Judged By
Score
100
Total Time
125ms
Peak Memory
2.051 MiB