結果
問題 | No.5020 Averaging |
ユーザー |
![]() |
提出日時 | 2024-02-25 13:25:49 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 706 ms / 1,000 ms |
コード長 | 1,336 bytes |
コンパイル時間 | 2,326 ms |
コンパイル使用メモリ | 210,376 KB |
実行使用メモリ | 6,676 KB |
スコア | 25,514,088 |
最終ジャッジ日時 | 2024-02-25 13:26:28 |
合計ジャッジ時間 | 39,007 ms |
ジャッジサーバーID (参考情報) |
judge15 / judge13 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
#include <bits/stdc++.h>using namespace std;uint64_t seed = 1234567891234567891;uint64_t xorshift64() {seed ^= seed << 13;seed ^= seed >> 7;seed ^= seed << 17;return seed;}int rand_int(int l, int r) {return l + xorshift64() % (r - l);}int main() {// step #1. inputint N;cin >> N;vector<long long> A(N), B(N);for (int i = 0; i < N; i++) {cin >> A[i] >> B[i];}// step #2. brute forceconst int samples = 700000;vector<bool> used(45, false);for (int i = 0; i < 32; i++) {used[i] = true;}double bestdiff = 1.0e+99;vector<bool> best;for (int id = 1; id <= samples; id++) {for (int i = 2; i < N; i++) {swap(used[i], used[rand_int(1, i + 1)]);}double sa = 0.0, sb = 0.0;for (int i = 0; i < N; i++) {if (used[i]) {sa += A[i];sb += B[i];}}sa /= 32.0;sb /= 32.0;double diff = max(abs(sa - 5.0e+17), abs(sb - 5.0e+17));if (bestdiff > diff) {bestdiff = diff;best = used;}}// step #3. final calculationvector<int> v;for (int i = 0; i < N; i++) {if (best[i]) {v.push_back(i);}}// step #4. outputcout << 31 << endl;for (int i = 2; i <= 32; i *= 2) {for (int j = 0; j < 32; j += i) {cout << v[j] + 1 << ' ' << v[j + i / 2] + 1 << endl;}}cerr << "bestdiff = " << bestdiff << endl;return 0;}