結果
問題 |
No.641 Team Contest Estimation
|
ユーザー |
![]() |
提出日時 | 2025-05-01 14:53:53 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 23 ms / 2,000 ms |
コード長 | 3,198 bytes |
コンパイル時間 | 3,568 ms |
コンパイル使用メモリ | 278,184 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-05-01 14:53:58 |
合計ジャッジ時間 | 4,713 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 9 |
ソースコード
#include <bits/stdc++.h> using namespace std; using i64 = long long; template <int P> struct ModInt { int v; constexpr ModInt() : v(0) {} constexpr ModInt(i64 v_) : v(v_ % P) { if (v < 0) { v += P; } } constexpr explicit operator int() const { return v; } constexpr friend ostream& operator<<(ostream &out, ModInt n) { return out << int(n); } constexpr friend istream& operator>>(istream &in, ModInt &n) { i64 v; in >> v; n = ModInt(v); return in; } constexpr friend bool operator==(ModInt a, ModInt b) { return a.v == b.v; } constexpr friend bool operator!=(ModInt a, ModInt b) { return a.v != b.v; } constexpr ModInt operator-() { ModInt res; res.v = v ? P - v : 0; return res; } constexpr ModInt& operator++() { v++; if (v == P) v = 0; return *this; } constexpr ModInt& operator--() { if (v == 0) v = P; v--; return *this; } constexpr ModInt& operator+=(ModInt o) { v -= P - o.v; v = (v < 0) ? v + P : v; return *this; } constexpr ModInt& operator-=(ModInt o) { v -= o.v; v = (v < 0) ? v + P : v; return *this; } constexpr ModInt& operator*=(ModInt o) { v = 1LL * v * o.v % P; return *this; } constexpr ModInt& operator/=(ModInt o) { return *this *= o.inv(); } constexpr friend ModInt operator++(ModInt &a, int) { ModInt r = a; ++a; return r; } constexpr friend ModInt operator--(ModInt &a, int) { ModInt r = a; --a; return r; } constexpr friend ModInt operator+(ModInt a, ModInt b) { return ModInt(a) += b; } constexpr friend ModInt operator-(ModInt a, ModInt b) { return ModInt(a) -= b; } constexpr friend ModInt operator*(ModInt a, ModInt b) { return ModInt(a) *= b; } constexpr friend ModInt operator/(ModInt a, ModInt b) { return ModInt(a) /= b; } constexpr ModInt qpow(i64 p) { ModInt res = 1, x = v; while (p > 0) { if (p & 1) { res *= x; } x *= x; p >>= 1; } return res; } constexpr ModInt inv() { return qpow(P - 2); } }; constexpr int P = 1e9 + 9; using Mint = ModInt<P>; int main() { cin.tie(nullptr)->sync_with_stdio(false); auto solve = [&]() { int n, k; cin >> n >> k; vector<i64> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } vector<int> cnt(k); for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { cnt[j] += a[i] >> j & 1; } } Mint avg = 0, var = 0; for (int i = 0; i < k; i++) { avg += Mint(n) * (1LL << i) / 2; var += Mint(n - 2 * cnt[i]) * (n - 2 * cnt[i]) * (1LL << i) * (1LL << i) / 4; } cout << avg * Mint(2).qpow(k) << '\n'; cout << var * Mint(4).qpow(k) << '\n'; }; solve(); return 0; }