結果
問題 | No.5020 Averaging |
ユーザー | futamegawa |
提出日時 | 2024-02-25 14:53:28 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 3 ms / 1,000 ms |
コード長 | 4,389 bytes |
コンパイル時間 | 2,390 ms |
コンパイル使用メモリ | 208,948 KB |
実行使用メモリ | 6,548 KB |
スコア | 19,167,042 |
最終ジャッジ日時 | 2024-02-25 14:53:33 |
合計ジャッジ時間 | 4,656 ms |
ジャッジサーバーID (参考情報) |
judge11 / judge12 |
純コード判定しない問題か言語 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,548 KB |
testcase_01 | AC | 2 ms
6,548 KB |
testcase_02 | AC | 2 ms
6,548 KB |
testcase_03 | AC | 2 ms
6,548 KB |
testcase_04 | AC | 2 ms
6,548 KB |
testcase_05 | AC | 2 ms
6,548 KB |
testcase_06 | AC | 2 ms
6,548 KB |
testcase_07 | AC | 2 ms
6,548 KB |
testcase_08 | AC | 2 ms
6,548 KB |
testcase_09 | AC | 2 ms
6,548 KB |
testcase_10 | AC | 2 ms
6,548 KB |
testcase_11 | AC | 2 ms
6,548 KB |
testcase_12 | AC | 2 ms
6,548 KB |
testcase_13 | AC | 2 ms
6,548 KB |
testcase_14 | AC | 2 ms
6,548 KB |
testcase_15 | AC | 2 ms
6,548 KB |
testcase_16 | AC | 2 ms
6,548 KB |
testcase_17 | AC | 2 ms
6,548 KB |
testcase_18 | AC | 2 ms
6,548 KB |
testcase_19 | AC | 2 ms
6,548 KB |
testcase_20 | AC | 2 ms
6,548 KB |
testcase_21 | AC | 2 ms
6,548 KB |
testcase_22 | AC | 2 ms
6,548 KB |
testcase_23 | AC | 2 ms
6,548 KB |
testcase_24 | AC | 2 ms
6,548 KB |
testcase_25 | AC | 2 ms
6,548 KB |
testcase_26 | AC | 2 ms
6,548 KB |
testcase_27 | AC | 2 ms
6,548 KB |
testcase_28 | AC | 2 ms
6,548 KB |
testcase_29 | AC | 2 ms
6,548 KB |
testcase_30 | AC | 2 ms
6,548 KB |
testcase_31 | AC | 2 ms
6,548 KB |
testcase_32 | AC | 2 ms
6,548 KB |
testcase_33 | AC | 2 ms
6,548 KB |
testcase_34 | AC | 2 ms
6,548 KB |
testcase_35 | AC | 2 ms
6,548 KB |
testcase_36 | AC | 2 ms
6,548 KB |
testcase_37 | AC | 2 ms
6,548 KB |
testcase_38 | AC | 2 ms
6,548 KB |
testcase_39 | AC | 2 ms
6,548 KB |
testcase_40 | AC | 2 ms
6,548 KB |
testcase_41 | AC | 2 ms
6,548 KB |
testcase_42 | AC | 2 ms
6,548 KB |
testcase_43 | AC | 2 ms
6,548 KB |
testcase_44 | AC | 2 ms
6,548 KB |
testcase_45 | AC | 2 ms
6,548 KB |
testcase_46 | AC | 2 ms
6,548 KB |
testcase_47 | AC | 3 ms
6,548 KB |
testcase_48 | AC | 2 ms
6,548 KB |
testcase_49 | AC | 2 ms
6,548 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; using llu = long long unsigned; vector<ll> dx = { 0, 0, -1, 1}; vector<ll> dy = {-1, 1, 0, 0}; #define TARGET 500000000000000000LL ll scoreCal(ll a0, ll a1, ll b0, ll b1) { ll newA = (a0 + a1) / 2; ll newB = (b0 + b1) / 2; ll score = max( abs(TARGET-newA), abs(TARGET-newB)); return score; } int main() { int N; cin >> N; vector<ll> A(N), B(N); for (int i=0; i<N; ++i) { cin >> A[i] >> B[i]; } vector<pair<int, int>> ret; for (int i=0; i<50; ++i) { int u = 0; int v = 0; ll minScore = scoreCal(A[0], A[0], B[0], B[0]); //cout << "1 - 1 minScore = " << minScore << endl; for (int j=1; j<N; ++j) { ll score = scoreCal(A[0], A[j], B[0], B[j]); //cout << "1 - " << j+1 << " minScore = " << score << endl; if (score < minScore) { minScore = score; v = j; } } if (v == 0) { if (abs(A[0]-TARGET) > abs(B[0]-TARGET)) { if (A[0]>TARGET) { // Aを小さくしたい int min1 = 1; int min2 = 2; ll minV1 = A[min1]; ll minV2 = A[min2]; for (int j=3; j<N; ++j) { if (A[j] < minV1) { minV1 = A[j]; min1 = j; continue; } if (A[j] < minV2) { minV2 = A[j]; min2 = j; } } u = min1; v = min2; } else { // Aを大きくしたい int max1 = 1; int max2 = 2; ll maxV1 = A[max1]; ll maxV2 = A[max2]; for (int j=3; j<N; ++j) { if (maxV1 < A[j]) { maxV1 = A[j]; max1 = j; continue; } if (maxV2 < A[j]) { maxV2 = A[j]; max2 = j; } } u = max1; v = max2; } } else { if (B[0]>TARGET) { // Bを小さくしたい int min1 = 1; int min2 = 2; ll minV1 = B[min1]; ll minV2 = B[min2]; for (int j=3; j<N; ++j) { if (B[j] < minV1) { minV1 = B[j]; min1 = j; continue; } if (B[j] < minV2) { minV2 = B[j]; min2 = j; } } u = min1; v = min2; } else { // Bを大きくしたい int max1 = 1; int max2 = 2; ll maxV1 = B[max1]; ll maxV2 = B[max2]; for (int j=3; j<N; ++j) { if (maxV1 < B[j]) { maxV1 = B[j]; max1 = j; continue; } if (maxV2 < B[j]) { maxV2 = B[j]; max2 = j; } } u = max1; v = max2; } } } ret.push_back(make_pair(u+1, v+1)); //cout << "1 - " << v+1 << " execute" << endl; ll newA = (A[u] + A[v]) / 2; ll newB = (B[u] + B[v]) / 2; A[u] = A[v] = newA; B[u] = B[v] = newB; //for (int i=0; i<N; ++i) { cout << A[i] << " " << B[i] << endl; } } cout << ret.size() << endl; for (auto x : ret) { cout << x.first << " " << x.second << endl; } return 0; }