結果
| 問題 |
No.641 Team Contest Estimation
|
| コンテスト | |
| ユーザー |
rgnerdplayer
|
| 提出日時 | 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;
}
rgnerdplayer