제출 #675226

#제출 시각아이디문제언어결과실행 시간메모리
675226vjudge1Table Tennis (info1cup20_tabletennis)C++17
100 / 100
198 ms4324 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<int> a; vector<pair<int, int>> solve(int sum){ vector<pair<int, int>> result; for (int lptr=0, rptr=a.size()-1; lptr < rptr;){ int csum = a[lptr] + a[rptr]; if (csum == sum){ result.emplace_back(a[lptr++], a[rptr--]); } else if (csum > sum){ rptr--; } else{ lptr++; } } return result; } bool solvable(int n, int sum){ int left = a.size(); for (int lptr=0, rptr=a.size()-1; lptr < rptr;){ int csum = a[lptr] + a[rptr]; if (csum == sum){ lptr++, rptr--; n -= 2; left -= 2; } else if (csum > sum){ rptr--; left--; } else{ lptr++; left--; } if (n == 0) return true; if (left < n) return false; } return false; } mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); signed main(){ cin.tie(0)->sync_with_stdio(0); int n, k; cin >> n >> k; a.resize(n+k); for (int i=0; i<a.size(); i++) cin >> a[i]; sort(a.begin(), a.end()); vector<int> possible_sums; for (int i=0; i<=k; i++){ for (int j=0; j+i<=k; j++){ possible_sums.push_back(a[i] + a[a.size()-1-j]); } } sort(possible_sums.begin(), possible_sums.end()); possible_sums.resize(unique(possible_sums.begin(), possible_sums.end()) - possible_sums.begin()); shuffle(possible_sums.begin(), possible_sums.end(), rng); for (int s: possible_sums){ if (!solvable(n, s)) continue; vector<pair<int, int>> result = solve(s); if (result.size() != n/2) continue; for (int i=0; i<result.size(); i++){ cout << result[i].first << " "; } for (int i=result.size()-1; i>=0; i--){ cout << result[i].second << " \n"[!i]; } break; } }

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

tabletennis.cpp: In function 'int main()':
tabletennis.cpp:48:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |     for (int i=0; i<a.size(); i++) cin >> a[i];
      |                   ~^~~~~~~~~
tabletennis.cpp:62:27: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   62 |         if (result.size() != n/2) continue;
      |             ~~~~~~~~~~~~~~^~~~~~
tabletennis.cpp:63:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |         for (int i=0; i<result.size(); i++){
      |                       ~^~~~~~~~~~~~~~
#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...