結果
問題 | No.1084 積の積 |
ユーザー |
|
提出日時 | 2020-06-19 21:51:49 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 52 ms / 2,000 ms |
コード長 | 1,935 bytes |
コンパイル時間 | 1,549 ms |
コンパイル使用メモリ | 173,524 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-03 14:20:32 |
合計ジャッジ時間 | 3,281 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 27 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;using vi = vector<int>;using vvi = vector<vi>;using vll = vector<ll>;using vvll = vector<vll>;using P = pair<int, int>;const double eps = 1e-8;const ll MOD = 1000000007;const int INF = INT_MAX / 2;const ll LINF = LLONG_MAX / 2;template <typename T1, typename T2>bool chmax(T1 &a, const T2 &b) {if(a < b) {a = b; return true;}return false;}template <typename T1, typename T2>bool chmin(T1 &a, const T2 &b) {if(a > b) {a = b; return true;}return false;}template<typename T1, typename T2>ostream& operator<<(ostream &os, const pair<T1, T2> p) {os << p.first << ":" << p.second;return os;}template<class T>ostream &operator<<(ostream &os, const vector<T> &v) {for(int i=0;i<((int)(v.size()));++i) {if(i) os << " ";os << v[i];}return os;}ll mod_pow(ll x, ll y) {ll res = 1;while(y) {if(y%2) (res *= x) %= MOD;(x *= x) %= MOD;y /= 2;}return res;}int main() {cin.tie(0);ios::sync_with_stdio(false);cout << fixed << setprecision(10);int n; cin >> n;vll a(n);bool zero = false;for(int i=0;i<(n);++i) cin >> a[i], zero |= a[i] == 0;if(zero) {cout << 0 << endl;return 0;}vll mul(n+1, 1);for(int i=0;i<(n);++i) {mul[i+1] = mul[i] * a[i] % MOD;}vll mulmul(n+1, 1);for(int i=0;i<(n);++i) {mulmul[i+1] = mulmul[i] * mul[i+1] % MOD;}int l = 0, r = 0;ll now = 1;vi v(n);while(l < n) {while(r < n) {if(now * a[r] >= 1e9) break;now *= a[r];r++;}v[l] = r;now /= a[l];l++;}ll ans = 1;for(int i=0;i<(n);++i) {ll now = 1;ll tmp = mod_pow(mul[i], v[i] - i);now *= mod_pow(tmp, MOD-2);now %= MOD;now *= mulmul[v[i]];now %= MOD;now *= mod_pow(mulmul[i], MOD-2);now %= MOD;ans *= now;ans %= MOD;}cout << ans << endl;}