結果
| 問題 |
No.1152 10億ゲーム
|
| コンテスト | |
| ユーザー |
smallcopse
|
| 提出日時 | 2020-08-07 23:03:07 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,452 bytes |
| コンパイル時間 | 178 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 27,880 KB |
| 平均クエリ数 | 24.68 |
| 最終ジャッジ日時 | 2024-07-17 05:09:22 |
| 合計ジャッジ時間 | 8,443 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 20 RE * 30 |
ソースコード
def prime_factorize(n):
a = []
while n % 2 == 0:
a.append(2)
n //= 2
f = 3
while f * f <= n:
if n % f == 0:
a.append(f)
n //= f
else:
f += 2
if n != 1:
a.append(n)
return a
def main():
x1, x2 = map(int, input().split())
# 素因数分解して2の数と5の数を数える
y1 = prime_factorize(x1)
y2 = prime_factorize(x2)
my_n2 = y1.count(2)
my_n5 = y1.count(5)
kiri_n2 = y2.count(2)
kiri_n5 = y2.count(5)
# 戦略: 2の数と5の数が相手と一致するように数を選んでいく
while x1 != x2:
# 自分の番
# 2の数の差と5の数の差のうち、差の大きいほうの差を小さくする
if abs(my_n2 - kiri_n2) > abs(my_n5 - kiri_n5):
if my_n2 < kiri_n2:
my_n2 += 1
x1 *= 2
elif my_n2 > kiri_n2:
my_n2 -= 1
x1 = x1 // 2
else:
if my_n5 < kiri_n5:
my_n5 += 1
x1 *= 5
elif my_n5 > kiri_n5:
my_n5 -= 1
x1 = x1 // 5
print(x1, flush=True)
# 一致したら終了
if x1 == x2:
return
x2 = int(input())
y2 = prime_factorize(x2)
kiri_n2 = y2.count(2)
kiri_n5 = y2.count(5)
if __name__ == '__main__':
main()
smallcopse