結果
問題 | No.1036 Make One With GCD 2 |
ユーザー |
![]() |
提出日時 | 2020-04-25 12:03:06 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,265 ms / 2,000 ms |
コード長 | 1,456 bytes |
コンパイル時間 | 255 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 269,364 KB |
最終ジャッジ日時 | 2024-09-16 13:40:33 |
合計ジャッジ時間 | 22,913 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 41 |
ソースコード
class SWAG:def __init__(self, func=sum, ele=0):self.back = list()self.back_acc = list()self.front = list()self.front_acc = list()self.func = funcself.ele = eledef length(self):return len(self.back) + len(self.front)def _displace(self):y = self.elewhile self.back:x = self.back.pop()y = self.func(x, y)self.front.append(x)self.front_acc.append(y)self.back_acc.clear()returndef push(self, x):self.back.append(x)y = self.ele if not self.back_acc else self.back_acc[-1]self.back_acc.append(self.func(y, x))returndef pop(self):if not self.front:self._displace()if not self.front:raise IndexErrorself.front_acc.pop()return self.front.pop()def fold(self):x = self.ele if not self.back_acc else self.back_acc[-1]y = self.ele if not self.front_acc else self.front_acc[-1]return self.func(x, y)def gcd(x, y):while y:x, y = y, x%yreturn xN = int(input())A = list(map(int, input().split()))ans = (N+1)*N//2que = SWAG(gcd)ridx = 0for i in range(N):if ridx < i:ridx = iwhile ridx < N and gcd(que.fold(), A[ridx]) > 1:que.push(A[ridx])ridx += 1ans -= que.length()if que.length():que.pop()print(ans)