結果

問題 No.995 タピオカオイシクナーレ
ユーザー Y17Y17
提出日時 2020-02-21 22:23:12
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 79 ms / 2,000 ms
コード長 2,689 bytes
コンパイル時間 1,760 ms
コンパイル使用メモリ 160,276 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-10-08 22:51:03
合計ジャッジ時間 3,529 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 3 ms
5,248 KB
testcase_01 AC 2 ms
5,248 KB
testcase_02 AC 3 ms
5,248 KB
testcase_03 AC 2 ms
5,248 KB
testcase_04 AC 3 ms
5,248 KB
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 3 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 3 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 AC 2 ms
5,248 KB
testcase_11 AC 3 ms
5,248 KB
testcase_12 AC 3 ms
5,248 KB
testcase_13 AC 3 ms
5,248 KB
testcase_14 AC 3 ms
5,248 KB
testcase_15 AC 3 ms
5,248 KB
testcase_16 AC 77 ms
5,248 KB
testcase_17 AC 79 ms
5,248 KB
testcase_18 AC 79 ms
5,248 KB
testcase_19 AC 78 ms
5,248 KB
testcase_20 AC 79 ms
5,248 KB
testcase_21 AC 79 ms
5,248 KB
testcase_22 AC 77 ms
5,248 KB
testcase_23 AC 78 ms
5,248 KB
testcase_24 AC 79 ms
5,248 KB
testcase_25 AC 76 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define M 1000000007 

template<int64_t MOD>
class ModInt {
    int64_t value;
public:
    // constructor
    inline ModInt(int64_t val = 0) noexcept :
        value((val >= MOD) ? (val % MOD) : (val < 0) ? ((val + MOD) % MOD) : val) {}

    // プリミティブ整数型へのキャスト (型の明示:必要)
    template<class Int>
    explicit inline operator Int() const noexcept { return static_cast<Int>(value); }

    inline ModInt inv() const noexcept {
        return ModInt<MOD>::pow(value, MOD-2);
    }

    inline ModInt& operator+=(ModInt x) noexcept {
        if ((value += x.value) >= MOD) value -= MOD;
        return *this;
    }
    inline ModInt& operator-=(ModInt x) noexcept {
        if ((value -= x.value) < 0) value += MOD;
        return *this;
    }
    inline ModInt& operator*=(ModInt x) noexcept {
        value = (value * x.value) % MOD; return *this;
    }
    inline ModInt& operator/=(ModInt x) noexcept {
        value = (value * x.inv().value) % MOD; return *this;
    }

    inline ModInt operator+(ModInt x) const noexcept { return ModInt(*this) += x; }
    inline ModInt operator-(ModInt x) const noexcept { return ModInt(*this) -= x; }
    inline ModInt operator*(ModInt x) const noexcept { return ModInt(*this) *= x; }
    inline ModInt operator/(ModInt x) const noexcept { return ModInt(*this) /= x; }
    inline bool operator==(ModInt x) const noexcept { return value == x.value; }
    inline bool operator!=(ModInt x) const noexcept { return !(this->operator==(x)); }

    friend ostream& operator<<(ostream &os, ModInt x) noexcept { os << x.value; return os; }
    friend istream& operator>>(istream &is, ModInt &x) noexcept { is >> x.value; return is; }

    static constexpr inline ModInt pow(int64_t n, int64_t p) noexcept {
        int64_t ret = 1;
        for(; p > 0; p >>= 1) {
            if (p & 1) ret = (ret * n) % MOD;
            n = (n * n) % MOD;
        }
        return ret;
    }

    ModInt p(int64_t p){
		int64_t n = value;
        int64_t ret = 1;
        for(; p > 0; p >>= 1) {
            if (p & 1) ret = (ret * n) % MOD;
            n = (n * n) % MOD;
        }
        return value = ret;
    }
};

using mint = ModInt<M>;

mint p, q;

mint func(int64_t x){
	mint tmp = 1;
	tmp /= 2;
	mint t2 = 1;
	t2 -= p*2/q;
	t2.p(x);
	t2 += 1;
	return tmp * t2; 
}

signed main(){
	int n, m;
	cin >> n >> m;

	int k;
	cin >> k;

	cin >> p >> q;

	mint b[100010];

	mint ans = 0;

	for(int i = 0;i < n;i++){
		cin >> b[i];
		if(i < m){
			ans += b[i] * func(k); 
		}else{
			ans += b[i] * ((mint)(1) - func(k)); 
		}
	}

	cout << ans << endl;

	return 0;
}
0