結果

問題 No.2929 Miracle Branch
ユーザー i_taku
提出日時 2025-10-17 12:41:07
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,373 bytes
コンパイル時間 316 ms
コンパイル使用メモリ 82,112 KB
実行使用メモリ 111,324 KB
最終ジャッジ日時 2025-10-17 12:41:21
合計ジャッジ時間 13,304 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 WA * 1
other AC * 28 WA * 15
権限があれば一括ダウンロードができます

ソースコード

diff #

from collections import Counter


def get_primes(size):
    is_prime = [True] * (size + 1)
    is_prime[0] = is_prime[1] = False
    primes = []
    for i in range(size + 1):
        if not is_prime[i]:
            continue
        primes.append(i)
        j = 2
        while i * j <= size:
            is_prime[i * j] = False
            j += 1
    return primes

X = int(input())
if X == 1:
    print(1)
    exit()
fact = []
primes = get_primes(2 << 17)
for p in primes:
    while X % p == 0:
        fact.append(p)
        X //= p
if X != 1:
    print(-1)
    exit()

counter = Counter(fact)
n = 0
t = 0
keys = []
for k, v in counter.items():
    if k == 2:
        t += (v + 1) // 2
        n += (v // 2) * 5
        n += (v % 2) * 3
        for _ in range(v // 2):
            keys.append(2 * k)
        if v % 2 == 1:
            keys.append(k)
    else:
        keys.append(k)
        t += v
        n += (k + 1) * v
keys.sort()

LIMIT = 200_000
if n > LIMIT:
    print(-1)
    exit()

print(n)
brown = []
green = []
for v in range(t):
    brown.append(v)
for v in range(t, n):
    green.append(v)
edge = []
for i in range(t - 1):
    edge.append((i, i + 1))
j = t
for i, k in enumerate(keys):
    for _ in range(k):
        edge.append((i, j))
        j += 1
for i, j in edge:
    print(i + 1, j + 1)
colors = ['b'] * len(brown) + ['g'] * len(green)
print(*colors)
0