結果
| 問題 | No.1253 雀見椪 | 
| コンテスト | |
| ユーザー |  mencotton | 
| 提出日時 | 2020-11-02 15:06:27 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 86 ms / 2,000 ms | 
| コード長 | 1,129 bytes | 
| コンパイル時間 | 702 ms | 
| コンパイル使用メモリ | 77,516 KB | 
| 実行使用メモリ | 5,376 KB | 
| 最終ジャッジ日時 | 2024-07-22 06:14:47 | 
| 合計ジャッジ時間 | 2,824 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 1 | 
| other | AC * 14 | 
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
const ll MOD = 1e9 + 7;
ll calc_pow(ll x, ll pow) {
    if (pow == 0) return 1;
    ll a = calc_pow(x, pow / 2);
    a = a * a % MOD;
    if (pow % 2 == 1) a *= x;
    return a % MOD;
}
ll calc_div(ll a, ll b) {
    return a * calc_pow(b, MOD - 2) % MOD;
}
vector<ll> fact;
void init_fact(int n) {
    fact = vector<ll>(n);
    fact[0] = 1;
    for (int i = 1; i < n; i++) fact[i] = fact[i - 1] * i % MOD;
}
ll calc_comb(ll n, ll r) {
    if (n < r)return 0;
    return calc_div(fact[n], fact[r] * fact[n - r] % MOD);
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        ll n, ag, bg, ac, bc, ap, bp;
        cin >> n >> ag >> bg >> ac >> bc >> ap >> bp;
        ll g = calc_div(ag, bg), c = calc_div(ac, bc), p = calc_div(ap, bp);
        ll ret = calc_pow(g + c, n) + calc_pow(c + p, n) + calc_pow(p + g, n);
        ret %= MOD;
        ret -= 2 * (calc_pow(g, n) + calc_pow(c, n) + calc_pow(p, n));
        while (ret < 0)ret += MOD;
        cout << (MOD - ret + 1) % MOD << endl;
    }
    return 0;
}
            
            
            
        