結果
| 問題 |
No.2929 Miracle Branch
|
| コンテスト | |
| ユーザー |
学ぶマン
|
| 提出日時 | 2024-10-14 13:49:20 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,256 bytes |
| コンパイル時間 | 218 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 85,376 KB |
| 最終ジャッジ日時 | 2024-10-14 13:49:32 |
| 合計ジャッジ時間 | 12,085 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 40 WA * 3 |
ソースコード
inf = 1<<60
X = int(input())
if X == 1:
print(2)
print(1, 2)
exit(print('b', 'g'))
limit = 2*10**5
def prime_factorize(n):
a = []
while n % 4 == 0:
a.append(4)
n //= 4
if n % 2 == 0:
a.append(2)
n //= 2
f = 3
while f * f <= n:
# limit を超えるような素因数は不適格
if f >= limit:
return [inf]
if n % f == 0:
a.append(f)
n //= f
else:
f += 2
if n != 1:
a.append(n)
return a
prime_factors = prime_factorize(X)
# limit 以上な素因数が含まれている場合は 実現できない
for prime in prime_factors:
if prime >= limit:
exit(print(-1))
# 茶色から採番
N = len(prime_factors) # 1 ~ N
# 緑色の個数
M = sum(prime_factors)
# 全部の頂点数
V = N + M
print(V)
# 茶色同士を連結するedge
# 1 と 2
# ...
# N - 1 と N
for i in range(1, N):
print(i, i + 1)
# 各茶色頂点i と緑頂点を連結するedge
cnt = N + 1 # から採番
for i in range(1, N + 1):
# メンバー数は prime_factors[i - 1]
for j in range(prime_factors[i - 1]):
print(i, cnt)
cnt += 1
color = ['b'] * N + ['g'] * M
print(*color)
学ぶマン