提出 #6171699


ソースコード 拡げる

import numpy as np
N,K = map(int,input().split())
MOD = 10 ** 9 + 7
M = int(N**.5)

# M+1以上で、商がぢょうとxになるやつ
upper_cnt = np.zeros(M+1, dtype=np.int64)
a = np.arange(M+1, dtype=np.int64)
upper_cnt[1:] = N // a[1:] - np.maximum(M, N // (a[1:]+1))

# 数列の末端ごとの個数
# upperについては、個数にわたって合計をとる
dp_lower = np.zeros((K+1,M+1), dtype=np.int64)
dp_upper = np.zeros((K+1,M+1), dtype=np.int64)
# 0項目に1を置いておくとする
dp_lower[0,1] = 1
for k in range(1,K+1):
    prev_lower = dp_lower[k-1]
    prev_upper = dp_upper[k-1]
    cum_lower = prev_lower.cumsum() % MOD
    cum_upper = prev_upper.cumsum() % MOD
    # 下側 to 下側
    dp_lower[k] += cum_lower[-1]
    # 上側 to 下側
    dp_lower[k] += cum_upper[-1]
    dp_lower[k,1:] -= cum_upper[:-1] # 商がn-1以下だと受け付けない
    dp_lower[k,0] = 0
    # 上側 to 上側:ないはず
    # 下側 to 上側:
    dp_upper[k] = cum_lower * upper_cnt
    dp_lower %= MOD
    dp_upper %= MOD
    
answer = (dp_lower[K].sum() + dp_upper[K].sum()) % MOD
print(answer)

提出情報

提出日時
問題 F - Small Products
ユーザ maspy
言語 Python (3.4.3)
得点 0
コード長 1154 Byte
結果 TLE
実行時間 2109 ms
メモリ 63700 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 600
結果
AC × 3
AC × 8
TLE × 7
セット名 テストケース
Sample s1.txt, s2.txt, s3.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, s1.txt, s2.txt, s3.txt
ケース名 結果 実行時間 メモリ
01.txt TLE 2109 ms 63700 KiB
02.txt TLE 2109 ms 56040 KiB
03.txt TLE 2109 ms 57484 KiB
04.txt TLE 2109 ms 59792 KiB
05.txt TLE 2109 ms 32780 KiB
06.txt AC 150 ms 12296 KiB
09.txt TLE 2109 ms 57236 KiB
10.txt AC 148 ms 12424 KiB
11.txt TLE 2109 ms 28408 KiB
12.txt AC 1888 ms 26872 KiB
13.txt AC 1418 ms 26744 KiB
14.txt AC 150 ms 12296 KiB
s1.txt AC 147 ms 12296 KiB
s2.txt AC 146 ms 12296 KiB
s3.txt AC 702 ms 23264 KiB