結果
| 問題 |
No.823 Many Shifts Easy
|
| コンテスト | |
| ユーザー |
qwewe
|
| 提出日時 | 2025-05-14 13:26:29 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 62 ms / 2,000 ms |
| コード長 | 2,018 bytes |
| コンパイル時間 | 214 ms |
| コンパイル使用メモリ | 82,256 KB |
| 実行使用メモリ | 59,904 KB |
| 最終ジャッジ日時 | 2025-05-14 13:27:19 |
| 合計ジャッジ時間 | 1,406 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
import sys
def solve():
N, K = map(int, sys.stdin.readline().split())
MOD = 10**9 + 7
if K == 0:
# Initial state: pieces at 1, ..., N
# Score = 1 + 2 + ... + N
# N*(N+1) is always even.
ans = (N * (N + 1) // 2) % MOD
print(ans)
return
fact = [1] * (N + 1)
inv_fact = [1] * (N + 1)
for i in range(1, N + 1):
fact[i] = (fact[i-1] * i) % MOD
inv_fact[N] = pow(fact[N], MOD - 2, MOD)
for i in range(N - 1, -1, -1):
inv_fact[i] = (inv_fact[i+1] * (i+1)) % MOD
def nPk_mod(n_val, k_val):
if k_val < 0 or k_val > n_val:
return 0
# n_val < 0 case should not occur with N >= 1
return (fact[n_val] * inv_fact[n_val-k_val]) % MOD
total_score_sum = 0
# Term1 for C_j (j >= 1 and j not in A_S)
# P(N-1, K)
# This is non-zero if 0 <= K <= N-1
term1_val = nPk_mod(N - 1, K)
# Term2 for C_j (j in [1,N-1], j in A_S, j+1 in A_S, pos(j) < pos(j+1))
# P(N-2, K-2) * (K choose 2)
# This is non-zero if 2 <= K <= N
term2_val = 0
if K >= 2:
# K*(K-1) is always even, so integer division //2 is fine before MOD.
binom_K_2 = (K * (K - 1) // 2)
term2_val = (nPk_mod(N - 2, K - 2) * (binom_K_2 % MOD)) % MOD # binom_K_2 can be large
# Cj_for_1_to_N_minus_1 is C_j for j in {1, ..., N-1}
Cj_for_1_to_N_minus_1 = (term1_val + term2_val) % MOD
# Sum for j from 1 to N-1
# (sum of j from 1 to N-1) * Cj_for_1_to_N_minus_1
sum_indices_1_to_N_minus_1 = 0
if N > 1: # If N=1, sum is 0
# (N-1)*N is always even
sum_indices_1_to_N_minus_1 = ( (N - 1) * N // 2 ) % MOD
total_score_sum = (sum_indices_1_to_N_minus_1 * Cj_for_1_to_N_minus_1) % MOD
# C_N (Count for N being occupied)
# This is P(N-1, K), which is term1_val
CN = term1_val
total_score_sum = (total_score_sum + N * CN) % MOD
print(total_score_sum)
solve()
qwewe