結果
問題 | No.641 Team Contest Estimation |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:44:03 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 145 ms / 2,000 ms |
コード長 | 2,488 bytes |
コンパイル時間 | 171 ms |
コンパイル使用メモリ | 82,372 KB |
実行使用メモリ | 100,988 KB |
最終ジャッジ日時 | 2025-03-20 20:44:09 |
合計ジャッジ時間 | 1,760 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 9 |
ソースコード
MOD = 10**9 + 9inv3 = pow(3, MOD-2, MOD)inv6 = pow(6, MOD-2, MOD)def main():import sysinput = sys.stdin.readdata = input().split()idx = 0N = int(data[idx])idx +=1K = int(data[idx])idx +=1A = list(map(int, data[idx:idx+N]))if K == 0:sum_A = sum(a % MOD for a in A) % MODpart1_val = sum( (a * a) % MOD for a in A ) % MODsum_part = (sum_A * sum_A - part1_val) % MODpart2_val = sum_part % MODtotal_S2_over_x = (part1_val + part2_val) % MODsigma_sq_4k = (total_S2_over_x * 1 - sum_A * sum_A) % MODif sigma_sq_4k < 0:sigma_sq_4k += MODprint(sum_A % MOD)print(sigma_sq_4k % MOD)return# Compute mu_partpow_2k_minus_1 = (pow(2, K, MOD) - 1) % MODpow_2k_1 = pow(2, K-1, MOD)mu_part = (N * pow_2k_1 % MOD) * pow_2k_minus_1 % MOD# Compute part1_valt1 = (pow(2, K, MOD) -1) % MODt2 = pow(2, K, MOD) % MODt3 = (pow(2, K+1, MOD) -1) % MODsum_ysquared = t1 * t2 % MODsum_ysquared = sum_ysquared * t3 % MODsum_ysquared = sum_ysquared * inv6 % MODpart1_val = sum_ysquared * N % MOD# Compute same_partsame_sum = 0for b in range(K):cnt = 0for a in A:if (a >> b) & 1:cnt +=1cnt %= MODc = cntterm1 = (c * (c-1)) // 2 % MODnc = (N - c) % MODterm2 = (nc * (nc-1)) // 2 % MODequal_pairs = (term1 + term2) % MODpower_4b = pow(4, b, MOD)same_sum = (same_sum + equal_pairs * power_4b) % MODpow_2k_1 = pow(2, K-1, MOD)same_part = same_sum * pow_2k_1 % MOD# Compute different_partterm = (pow(2, K, MOD) -1) % MODterm = term * term % MODterm2 = (pow(4, K, MOD) -1) % MODterm2 = term2 * inv3 % MODterm_diff = (term - term2) % MODif term_diff < 0:term_diff += MODterm_diff = term_diff * pow(2, K-2, MOD) % MODc_n_2 = (N * (N-1) // 2) % MODdifferent_part = term_diff * c_n_2 % MODpart2_val = (2 * (same_part + different_part)) % MODtotal_S2_over_x = (part1_val + part2_val) % MODsigma_sq_4k = (total_S2_over_x * pow(2, K, MOD) % MOD) - (mu_part * mu_part % MOD)sigma_sq_4k %= MODif sigma_sq_4k <0:sigma_sq_4k += MODprint(mu_part % MOD)print(sigma_sq_4k % MOD)if __name__ == "__main__":main()