結果

問題 No.1318 ABCD quadruplets
ユーザー lam6er
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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()
0