提出 #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 | ||||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |