結果
| 問題 | No.1200 お菓子配り-3 |
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 19:27:11 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,024 bytes |
| コンパイル時間 | 209 ms |
| コンパイル使用メモリ | 82,032 KB |
| 実行使用メモリ | 78,592 KB |
| 最終ジャッジ日時 | 2025-06-12 19:27:51 |
| 合計ジャッジ時間 | 20,289 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 29 WA * 2 |
ソースコード
import math
def get_divisors(n):
if n == 0:
return []
divisors = set()
for i in range(1, int(math.isqrt(abs(n))) + 1):
if abs(n) % i == 0:
divisors.add(i)
divisors.add(abs(n) // i)
return sorted(divisors)
def main():
import sys
input = sys.stdin.read().split()
idx = 0
S = int(input[idx])
idx += 1
results = []
for _ in range(S):
X = int(input[idx])
Y = int(input[idx + 1])
idx += 2
D = X - Y
S_total = X + Y
count = 0
if D == 0:
n = 2 * X
divisors = get_divisors(n)
for d_prime in divisors:
if d_prime > X:
continue
if X % d_prime != 0:
continue
if d_prime < 2:
continue
A = d_prime - 1
B = X // d_prime
C = X // d_prime
if B <= 0 or C <= 0:
continue
count += 1
else:
abs_D = abs(D)
divisors = get_divisors(abs_D)
for d in divisors:
d_prime = d + 2
if d_prime == 0:
continue
if S_total % d_prime != 0:
continue
A_candidate = d + 1
if A_candidate < 2:
continue
numerator = A_candidate * X - Y
denominator = A_candidate ** 2 - 1
if denominator == 0:
continue
if numerator % denominator != 0:
continue
B = numerator // denominator
if B <= 0:
continue
C = X - A_candidate * B
if C <= 0:
continue
count += 1
results.append(count)
sys.stdout.write('\n'.join(map(str, results)) + '\n')
if __name__ == "__main__":
main()
gew1fw