結果
問題 | No.895 MESE |
ユーザー |
![]() |
提出日時 | 2019-09-27 21:47:12 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 120 ms / 2,000 ms |
コード長 | 2,551 bytes |
コンパイル時間 | 1,078 ms |
コンパイル使用メモリ | 114,544 KB |
実行使用メモリ | 11,560 KB |
最終ジャッジ日時 | 2024-09-24 22:48:21 |
合計ジャッジ時間 | 3,679 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
#include<iostream>#include<string>#include<cstdio>#include<vector>#include<cmath>#include<algorithm>#include<functional>#include<iomanip>#include<queue>#include<ciso646>#include<random>#include<map>#include<set>#include<bitset>#include<stack>#include<unordered_map>#include<utility>#include<cassert>#include<complex>using namespace std;//#define int long longtypedef long long ll;typedef unsigned long long ul;typedef unsigned int ui;const ll mod = 1000000007;const ll INF = mod * mod;typedef pair<int, int>P;typedef pair<int, bool> sP;#define stop char nyaa;cin>>nyaa;#define rep(i,n) for(int i=0;i<n;i++)#define per(i,n) for(int i=n-1;i>=0;i--)#define Rep(i,sta,n) for(int i=sta;i<n;i++)#define rep1(i,n) for(int i=1;i<=n;i++)#define per1(i,n) for(int i=n;i>=1;i--)#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)typedef pair<ll, ll> LP;typedef vector<ll> vec;typedef long double ld;typedef pair<ld, ld> LDP;const ld eps = 1e-5;const ld pi = acos(-1.0);typedef vector<vector<ll>> mat;typedef vector<ll> vec;ll mod_pow(ll x, ll n) {ll ret = 1;while (n > 0) {if (n % 2)ret = ret * x%mod;x = x * x%mod; n >>= 1;}return ret;}struct perm {private:int sz;vector<ll> p, invp;public:perm(int n) {sz = n + 1;p.resize(sz), invp.resize(sz);p[0] = 1;rep1(i, sz - 1) {p[i] = p[i - 1] * i%mod;}invp[sz - 1] = 1;ll cop = mod - 2, x = p[sz - 1];while (cop) {if (cop % 2)invp[sz - 1] = invp[sz - 1] * x%mod;cop >>= 1; x = x * x % mod;}per(i, sz - 1) {invp[i] = invp[i + 1] * (i + 1) % mod;}}ll comb(ll x, ll y) {if (x < y || y < 0)return 0;ll ret = p[x];(ret *= invp[y]) %= mod;(ret *= invp[x - y]) %= mod;return ret;}ll combP(ll x, ll y) {if (x < y || y < 0)return 0;return p[x] * invp[x - y] % mod;}};perm p(1 << 19);void solve() {int a, b, c; cin >> a >> b >> c;ll ans = 0;for (int x = 0; x <= a + b + c - 3; x++) {ll s = p.comb(a + b - 1, b);s -= p.comb(x - c + 1, b);//ll s = p.comb(a + b, a) - p.comb(x - c + 1, a) - p.comb(x - c + 1, b);//cout << s << endl;s = (s%mod + mod) % mod;ll z = p.comb(x, c - 1);ans += mod_pow(2, x)*z%mod*s%mod;//cout << ans%mod << endl;ll zz = z * (c - 1) % mod*mod_pow(x, mod - 2) % mod;ans += zz * s%mod*(mod_pow(2, x) - 1) % mod;//cout << ans % mod << endl;ans %= mod;}//ans = ans * (mod + 1) / 2 % mod;cout << ans << endl;}signed main() {ios::sync_with_stdio(false);cin.tie(0);//init();solve();//stopreturn 0;}