제출 #717208

#제출 시각아이디문제언어결과실행 시간메모리
717208vjudge1Table Tennis (info1cup20_tabletennis)C++17
100 / 100
380 ms33168 KiB
#include <bits/stdc++.h>
using namespace std;

int n, k;
vector<int> a;

bool check(int sum) {
    int l = 1, r = n + k;
    int good = 0;
    while (l < r) {
        if (a[l] + a[r] == sum) {
            good += 2;
            l++; r--;
            if (good >= n) return true;
        } else if (a[l] + a[r] < sum) {
            l++;
        } else {
            r--;
        }
    }
    return false;
}

vector<int> construct(int sum) {
    int l = 1, r = n + k;
    vector<int> ans;
    while (l < r) {
        if (a[l] + a[r] == sum) {
            ans.push_back(a[l]);
            ans.push_back(a[r]);
            l++; r--;
            if (ans.size() == n) break;
        } else if (a[l] + a[r] < sum) {
            l++;
        } else {
            r--;
        }
    }
    sort(ans.begin(), ans.end());
    return ans;
}

int main() {
    ios::sync_with_stdio(false);
    cin >> n >> k;
    a.resize(n + k + 1);
    for (int i = 1; i <= n + k; i++) cin >> a[i];


    int sum = -1;
    if (n < 4 * k) {
        for (int i = 1; i <= k + 1 && sum == -1; i++) {
            for (int j = n + k; j >= n - 1; j--) {
                if (check(a[i] + a[j])) {
                    sum = a[i] + a[j];
                    break;
                }
            }
        }
        assert(sum != -1);
    } else {
        map<int, int> cnt;
        for (int i = 1; i <= 2 * k; i++) {
            for (int j = n + k; j >= n - k; j--) {
                cnt[a[i] + a[j]]++;
            }
        }
        for (auto [s, c] : cnt) {
            if (c >= k && check(s)) {
                sum = s;
                break;
            }
        }
    }
    vector<int> ans = construct(sum);
    for (int x : ans) cout << x << " ";
    cout << endl;
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

tabletennis.cpp: In function 'std::vector<int> construct(int)':
tabletennis.cpp:32:28: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   32 |             if (ans.size() == n) break;
      |                 ~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...