# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
524418 | iskhakkutbilim | Table Tennis (info1cup20_tabletennis) | C++14 | 3063 ms | 4352 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{
reverse(a.begin(), a.end());
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";
}
// map<int, int> mp;
// int l = 0;
// int r = n + k;
// for(int i = 0;i < n+k; i++){
// int j = i + 1;
// if(j >= n + k) break;
// if((n - i - 1) < 0 or (n - j - 1) < 0) break;
// if(s[i] + s[n-i-1] != s[j] + s[n-j-1]){
//
// }
// }
// int i_s = 0, i_e;
// int j_s = 1, j_e;
// while(i_e > i_s and j_e > j_s){
// i_e = ((n + k) - i_s - 1);
// j_e = ((n + k) - j_s - 1);
//
// if(a[i_e] + a[i_s] != a[j_e] + a[j_s]){
//
// }
//
// i_s++;
// j_s++;
// }
// for(int i = l;i < r; i++){
// cout << a[i] << " ";
// }
}
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... |