結果

問題 No.1084 積の積
ユーザー leaf_1415leaf_1415
提出日時 2020-06-19 21:36:37
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 66 ms / 2,000 ms
コード長 1,277 bytes
コンパイル時間 1,341 ms
コンパイル使用メモリ 79,032 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-07-03 14:04:47
合計ジャッジ時間 2,578 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 27
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <cassert>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <string>
#include <algorithm>
#include <utility>
#define llint long long
#define inf 1e18
#define rep(x, s, t) for(llint (x) = (s); (x) < (t); (x)++)
#define Rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++)
#define chmin(x, y) (x) = min((x), (y))
#define chmax(x, y) (x) = max((x), (y))
#define mod 1000000007

using namespace std;
typedef pair<llint, llint> P;

llint n;
llint a[100005];

llint modpow(llint a, llint n)
{
	if(n == 0) return 1;
	if(n % 2){
		return ((a%mod) * (modpow(a, n-1)%mod)) % mod;
	}
	else{
		return modpow((a*a)%mod, n/2) % mod;
	}
}

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];
	
	llint mul = 1, mul2 = 1, r = 0, ans = 1;
	for(int l = 1; l <= n; l++){
		while(r < n && mul * a[r+1] < 1000000000){
			r++;
			mul *= a[r];
			mul2 *= mul, mul2 %= mod;
		}
		ans *= mul2, ans %= mod;
		
		llint inv = modpow(a[l], mod-2);
		mul *= inv, mul %= mod;
		mul2 *= modpow(inv, r-l+1), mul2 %= mod;
	}
	cout << ans << endl;
	
	return 0;
}
0