結果
| 問題 | 
                            No.895 MESE
                             | 
                    
| コンテスト | |
| ユーザー | 
                             Ogtsn99
                         | 
                    
| 提出日時 | 2019-09-27 23:18:16 | 
| 言語 | C++14  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,813 bytes | 
| コンパイル時間 | 1,761 ms | 
| コンパイル使用メモリ | 170,576 KB | 
| 実行使用メモリ | 17,040 KB | 
| 最終ジャッジ日時 | 2024-09-25 01:52:08 | 
| 合計ジャッジ時間 | 3,055 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 WA * 1 | 
| other | AC * 5 WA * 21 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define rrep(i,n) for(int (i)=((n)-1);(i)>=0;(i)--)
#define itn int
#define all(x) (x).begin(),(x).end()
#define F first
#define S second
const long long INF = 1LL << 60;
const int MOD = 1000000007;
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
const int MAX = 510000;
long long fac[MAX], finv[MAX], inv[MAX];
void COMinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++){
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}
long long COM(int n, int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
signed main(void){
    int a,b,c; cin>>a>>b>>c;
    COMinit();
    vector <int> bit(100010); 
    itn n = a+b+c;
    bit[0] = 1;
    rep(i,100005){
        bit[i+1] = (bit[i]*2)%MOD;
    }
    vector <int> sumbit(100010);
    sumbit[0] = 1;
    rep(i,100005){
        if(i==0) continue;
        sumbit[i] = (sumbit[i-1] + bit[i])%MOD;
    }
    int ans = 0;
    rep(i,a){
        int nowa = a-(i+1), nowb = b-1, nowc = c;
        //cout<<nowa<<' '<<nowb<<' '<<nowc<<endl;
        //long double ritsu =/(nowa+nowb+nowc) * nowc;
        int x = n-i-2;
        
        int add = COM(x,nowb)*COM(x-nowb, nowa)*COM(x-nowb-nowa,nowc);
        add *= nowc;
        add %= MOD;
        add /= (x);
         add %= MOD; add*= sumbit[x-1];
        add %= MOD;
        ans += add;
        ans %= MOD;
    }
    cout<<ans<<endl;
}
            
            
            
        
            
Ogtsn99