結果
問題 | No.147 試験監督(2) |
ユーザー | 0x19f |
提出日時 | 2017-09-27 01:36:06 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 798 ms / 2,000 ms |
コード長 | 1,364 bytes |
コンパイル時間 | 1,536 ms |
コンパイル使用メモリ | 167,184 KB |
実行使用メモリ | 12,032 KB |
最終ジャッジ日時 | 2024-11-15 16:55:09 |
合計ジャッジ時間 | 5,873 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 796 ms
12,032 KB |
testcase_01 | AC | 795 ms
12,032 KB |
testcase_02 | AC | 798 ms
12,032 KB |
testcase_03 | AC | 3 ms
5,248 KB |
ソースコード
#include <bits/stdc++.h> #define REP(i, a, n) for(ll i = ((ll) a); i < ((ll) n); i++) #define MOD 1000000007LL using namespace std; typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; ll N, C[30000]; string D[30000]; mat mul(mat &A, mat &B) { mat C(A.size(), vector<ll>(B[0].size())); REP(i, 0, A.size()) { REP(j, 0, B[0].size()) { REP(k, 0, B.size()) { C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD; } } } return C; } mat pow(mat A, ll n) { mat B(A.size(), vec(A.size())); REP(i, 0, A.size()) B[i][i] = 1; while(n > 0) { if(n & 1) B = mul(B, A); A = mul(A, A); n >>= 1; } return B; } ll modulo_power(ll a, ll n) { if(n == 0) return 1; if(n % 2 == 0) return modulo_power((a * a) % MOD, n / 2); return (a * modulo_power(a, n - 1)) % MOD; } ll powi(ll x, string const &d) { ll y = 1; ll n = d.size(); for(ll i = d.size() - 1; i >= 0; i--) { ll c = d[i] - '0'; ll z = 1; REP(j, 0, 10) { if(j == c) y = (y * z) % MOD; z = (z * x) % MOD; } x = z; } return y; } int main(void) { cin >> N; REP(i, 0, N) cin >> C[i] >> D[i]; ll ans = 1; REP(i, 0, N) { mat A(2, vec(2)); A[0][0] = 1; A[0][1] = 1; A[1][0] = 1; A[1][1] = 0; ans = (ans * powi(pow(A, C[i] + 2)[0][1], D[i])) % MOD; } cout << ans << endl; }