結果
| 問題 |
No.1084 積の積
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-04-01 11:27:25 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 583 ms / 2,000 ms |
| コード長 | 1,446 bytes |
| コンパイル時間 | 713 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 21,580 KB |
| 最終ジャッジ日時 | 2024-11-19 01:14:49 |
| 合計ジャッジ時間 | 10,720 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 27 |
ソースコード
from collections import deque
mod=10**9+7
th=10**9
class MyQue:
"""
value:10**9未満判定、pop時のvalue_pyrの計算に使用
value_pyr:積の積の計算に使用。
"""
def __init__(self):
self.q=deque()
self.value=1
self.value_pyr=1
self.length=0
def push(self,x):
self.value*=x
self.q.append(x)
#assert self.value<th
self.length+=1
self.value_pyr*=pow(x,self.length,mod)
if self.value_pyr>=mod:self.value_pyr%=mod
def pop(self):
#assert self.length>0,(self.value,q,self.length)
self.value_pyr*=pow(self.value,mod-2,mod)
if self.value_pyr>=mod:self.value_pyr%=mod
x=self.q.popleft()
self.value//=x
#assert self.value<th
self.length-=1
def main0(n,a):
q=MyQue()
ans=1
for i in range(n):
if a[i]==0:return 0
while q.value*a[i]>=th:
q.pop()
q.push(a[i])
ans*=q.value_pyr
if ans>=mod:ans%=mod
return ans
def main1(n,a):
ans=1
for i in range(n):
for j in range(i,n):
x=1
for k in range(i,j+1):
x*=a[k]
if x<th:
ans*=x
ans%=mod
return ans
if __name__=='__main__':
n=int(input())
a=list(map(int,input().split()))
ans0=main0(n,a)
print(ans0)
#ans1=main1(n,a)
#print(ans1)