結果
問題 |
No.1318 ABCD quadruplets
|
ユーザー |
![]() |
提出日時 | 2025-04-15 23:33:46 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,412 bytes |
コンパイル時間 | 143 ms |
コンパイル使用メモリ | 82,844 KB |
実行使用メモリ | 85,680 KB |
最終ジャッジ日時 | 2025-04-15 23:34:48 |
合計ジャッジ時間 | 4,639 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 11 TLE * 1 -- * 18 |
ソースコード
import sys import math def main(): N, M = map(int, sys.stdin.readline().split()) ans = [0] * (N + 1) for d in range(M + 1): current_val = d * d if current_val > N: continue sum_d = d for c in range(M + 1): sum_cd = sum_d + c add_c = c * sum_cd new_val = current_val + add_c if new_val > N: continue remaining_b = N - new_val if remaining_b < 0: continue sum_cd_b = sum_cd # sum_cd = c + d discriminant_b = sum_cd_b ** 2 + 4 * remaining_b if discriminant_b < 0: continue sqrt_disc_b = math.isqrt(discriminant_b) if sqrt_disc_b * sqrt_disc_b > discriminant_b: sqrt_disc_b -= 1 if discriminant_b < 0: b_max = -1 else: if (sqrt_disc_b - sum_cd_b) % 2 == 0: b_max = (sqrt_disc_b - sum_cd_b) // 2 else: b_max = (sqrt_disc_b - sum_cd_b - 1) // 2 b_max = min(b_max, M) if b_max < 0: continue for b in range(0, b_max + 1): sum_bcd = sum_cd + b add_b = b * sum_bcd new_val2 = new_val + add_b if new_val2 > N: continue remaining_a = N - new_val2 if remaining_a < 0: continue sum_bcd_a = sum_bcd discriminant_a = sum_bcd_a ** 2 + 4 * remaining_a if discriminant_a < 0: a_max = -1 else: sqrt_disc_a = math.isqrt(discriminant_a) if sqrt_disc_a * sqrt_disc_a > discriminant_a: sqrt_disc_a -= 1 a_max = (sqrt_disc_a - sum_bcd_a) // 2 a_max = min(a_max, M) if a_max < 0: continue for a in range(0, a_max + 1): final_val = new_val2 + a * (sum_bcd_a + a) if final_val <= N: ans[final_val] += 1 print('\n'.join(map(str, ans))) if __name__ == "__main__": main()