結果
| 問題 | No.1486 ロボット | 
| コンテスト | |
| ユーザー |  nephrologist | 
| 提出日時 | 2021-04-24 12:44:41 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,934 bytes | 
| コンパイル時間 | 150 ms | 
| コンパイル使用メモリ | 82,400 KB | 
| 実行使用メモリ | 76,512 KB | 
| 最終ジャッジ日時 | 2024-07-04 09:04:22 | 
| 合計ジャッジ時間 | 1,887 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 15 WA * 2 | 
ソースコード
import sys
from heapq import heappop, heappush
from math import gcd
input = sys.stdin.buffer.readline
a, b, c, d, e = map(int, input().split())
g = gcd(a + b, c + d)
lcm = (a + b) * (c + d) // g
temp = 0
events = []
while temp < lcm:
    heappush(events, (temp, 1))
    heappush(events, (temp + a, -1))
    temp += a + b
temp = 0
while temp < lcm:
    heappush(events, (temp, 2))
    heappush(events, (temp + c, -2))
    temp += c + d
# print("events1", events)
score_cycle = 0
flag1 = 0
flag2 = 0
now = 0
onflag = 0
while events:
    temp, num = heappop(events)
    # print("tn", temp, num)
    if num == 1:
        flag1 = 1
    elif num == 2:
        flag2 = 1
    elif num == -1:
        flag1 = 0
    else:
        flag2 = 0
    if flag1 == 1 and flag2 == 1:
        onflag = 1
        now = temp
    elif flag1 == 0:
        if onflag:
            score_cycle += temp - now
            onflag = 0
    elif flag2 == 0:
        if onflag:
            score_cycle += temp - now
            onflag = 0
events = []
lim = e % lcm
temp = 0
while temp < lim:
    heappush(events, (temp, 1))
    temp += a
    if temp > lim:
        break
    heappush(events, (temp, -1))
    temp += b
temp = 0
while temp < lim:
    heappush(events, (temp, 2))
    temp += c
    if temp > lim:
        break
    heappush(events, (temp, -2))
    temp += d
# print("events2", events)
score_rem = 0
flag1 = 0
flag2 = 0
now = 0
onflag = 0
while events:
    temp, num = heappop(events)
    if num == 1:
        flag1 = 1
    elif num == 2:
        flag2 = 1
    elif num == -1:
        flag1 = 0
    else:
        flag2 = 0
    if flag1 == 1 and flag2 == 1:
        onflag = 1
        now = temp
    elif flag1 == 0:
        if onflag:
            score_rem += temp - now
            onflag = 0
    elif flag2 == 0:
        if onflag:
            score_rem += temp - now
            onflag = 0
ans = (e // lcm) * score_cycle + score_rem
print(ans)
            
            
            
        