# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
525061 | iskhakkutbilim | Table Tennis (info1cup20_tabletennis) | C++14 | 3103 ms | 632248 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// Author: Tazhibaev Iskhak
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef tree<pair<int, int> ,null_type,less< pair<int, int> >,rb_tree_tag,
tree_order_statistics_node_update> ordered_set;
const long double pi = acos((long double) - 1.0);
const double eps = (double)1e-9;
const int INF = 1e9 + 7;
#define ff first
#define ss second
#define ll long long
#define ld long double
#define pb push_back
void usaco( string filename){
freopen((filename+".in").c_str(), "r", stdin);
freopen((filename+".out").c_str(), "w", stdout);
}
main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int n, k; cin >> n >> k;
vector<int> a(n + k);
for(int i = 0;i < n + k; i++){
cin >> a[i];
}
function <bool(vector<int>) > good = [&](vector<int> s){
for(int i = 0;i < n; i++){
int j = i + 1;
if(j >= n or (n - i - 1) < 0 or (n - j - 1) < 0) break;
if(s[i] + s[n-i-1] != s[j] + s[n-j-1]) return false;
}
return true;
};
if(k == 1){
for(int i = 0;i < n + k; i++){
vector<int> sub;
for(int j = 0;j < n + k; j++){
if(i != j) sub.push_back(a[j]);
}
if(good(sub)){
for(auto to : sub) cout << to << " ";
return 0;
}
}
}else if(n + k <= 18){
for(int mask = 0; mask < (1 << (n + k)); mask++){
if(__builtin_popcount(mask) != n) continue;
vector<int> sub;
for(int i = 0;i < n + k; i++){
if(mask & (1 << i)) sub.push_back(a[i]);
}
if(good(sub)){
for(auto x : sub) cout << x << " ";
return 0;
}
}
}else if(n <= 100 and k <= 100 or (n <= 150000 and k==2)){
for(int i = 0; i < n + k; i++){
vector<int> sub;
for(int j = i;j < n + k; j++){
if(sub.size() == n) break;
sub.push_back(a[j]);
}
if(sub.size() < n) break;
if(good(sub)){
for(auto x : sub){
cout << x << " ";
}
return 0;
}
// cout << "\n" << "------" << "\n";
}
}else{
// 1 2 3 4
vector<int> jp;
map<int, int> mp;
for(int i = 0;i < n + k; i++){
for(int j = i + 1; j < n + k; j++){
mp[a[i] + a[j]]++;
}
}
int count_sum=-1, sum=-1;
for(auto to : mp){
if(to.ss > count_sum){
count_sum = to.ss;
sum = to.ff;
}
}
multiset<int> st(a.begin(), a.end());
for(int i = 0;i < n + k; i++){
if(st.count(sum - a[i]) and st.count(a[i])){
jp.push_back(a[i]);
jp.push_back(sum - a[i]);
st.erase(st.find(a[i]));
st.erase(st.find(sum - a[i]));
}
}
sort(jp.begin(), jp.end());
for(auto x : jp){
cout << x << " ";
}
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |