求助!WA on#3
查看原帖
求助!WA on#3
228770
ZBAA_MKC楼主2021/5/15 09:40
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
typedef long long ll;

inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch >'9')
	{
        if(ch == '-')
		{
         	f = -1;
		}
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
	{
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

inline ll lread()
{
    ll x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch >'9')
	{
        if(ch == '-')
		{
         	f = -1;
		}
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
	{
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

ll a[25];
int inv[25];
int n;
ll m, ans = 0;

int qpow(int a, int b)
{
	int ans = 1;
	ll base = (ll)a % mod;
	while(b)
	{
		if (b & 1)
		{
			ans = (ll)ans * base % mod;
		}
		base = (ll)base * base % mod;
		b >>= 1;
	}
	return ans;
}

int C(ll y, int x)
{
	if (y < 0 || x < 0 || y < x)
	{
		return 0;
	}
	y %= mod;
	if (y == 0 || x == 0)
	{
		return 1;
	}
	int ans = 1; 
	for (int i = 0; i < x; i++)
	{
		ans = (ll)ans * (y - i) % mod;
	}
	for (int i = 1; i <= x; i++)
	{
		ans = (ll)ans * inv[i] % mod;
	}
	return ans;
}

int main()
{
   	for (int i = 1; i <= 20; i++)
   	{
   		inv[i] = qpow(i, mod - 2);
	}
	n = read();
	m = lread();
	for (int i = 1; i <= n; i++)
	{
		a[i] = lread();
	}
	for (int x = 0; x < 1<<n; x++)
	{
		if (x == 0)
		{
			ans = (ans + C(n + m - 1, n - 1)) % mod;
		}
		else
		{
			ll t = n + m;
			int p = 0;
			for (int i = 0; i < n; i++)
			{
				if (x >> i & 1)
				{
					p++;
					t -= a[i + 1];
				}
			}
			t -= p + 1;
			if (p & 1)
			{
				ans = (ans - C(t, n - 1)) % mod;
			}
			else
			{
				ans = (ans - C(t, n - 1)) % mod;
			}
		}
	}
	cout << (ans + mod) % mod << endl;
	return 0;
}
2021/5/15 09:40
加载中...