Submission #1262680

#TimeUsernameProblemLanguageResultExecution timeMemory
1262680podvorniyTable Tennis (info1cup20_tabletennis)C++20
35 / 100
40 ms10564 KiB
#include <iostream> #include <vector> #include <numeric> #include <algorithm> #include <set> #include <map> std::vector<int> check(long long S, const std::vector<int>& A, int N) { if (N == 0) { return {}; } std::vector<int> solution; solution.reserve(N); int l = 0; int r = A.size() - 1; while (l < r) { long long current_sum = (long long)A[l] + A[r]; if (current_sum == S) { // Эта пара подходит, добавляем в решение. solution.push_back(A[l]); solution.push_back(A[r]); l++; r--; } else if (current_sum < S) { // A[l] слишком мал, его нужно отбросить. l++; } else { // current_sum > S // A[r] слишком велик, его нужно отбросить. r--; } } // Проверка успешна, если мы набрали ровно N элементов. if (solution.size() == N) { return solution; } return {}; // Не удалось найти решение для этой суммы S. } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int N, K; std::cin >> N >> K; int M = N + K; std::vector<int> A(M); for (int i = 0; i < M; ++i) { std::cin >> A[i]; } // В условии сказано "given a sorted sequence", но сортировка делает код надежнее. if (!std::is_sorted(A.begin(), A.end())) { std::sort(A.begin(), A.end()); } // Генерируем кандидатов на сумму S (логика из подзадач 6 и 7) // Используем std::set для хранения только уникальных сумм. std::map<long long, int> candidate_sums; for (int i = 0; i <= K; ++i) { for (int j = M - 1 - K; j < M; ++j) { // Убедимся, что индексы не пересекаются и массив достаточно велик if (i < j) { candidate_sums[(long long)A[i] + A[j]]++; } } } // Проверяем каждого кандидата for (auto [S, cnt] : candidate_sums) { if (M > 4 * K && cnt < K) { continue; } std::vector<int> result = check(S, A, N); if (!result.empty()) { // Решение найдено! // Отсортируем для единообразного вывода и выведем результат. std::sort(result.begin(), result.end()); for (int i = 0; i < result.size(); ++i) { std::cout << result[i] << (i == result.size() - 1 ? "" : " "); } std::cout << "\n"; // Так как нужно найти любое решение, можно завершать работу. return 0; } } // Этот участок кода не должен быть достигнут, так как решение всегда существует. return 0; }
#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...