結果
問題 | No.823 Many Shifts Easy |
ユーザー |
![]() |
提出日時 | 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()