제출 #1145054

#제출 시각아이디문제언어결과실행 시간메모리
1145054dobri_okeTable Tennis (info1cup20_tabletennis)C++20
20 / 100
3095 ms4840 KiB
#pragma GCC target ("avx2")   
#pragma GCC optimize ("Ofast")   
#include <bits/stdc++.h>   
using namespace std;  
#define int long long  
#define F first 
#define S second 
#define pb push_back 
const int N = 1e6, NN=26;
const int mod=1e9+7;
//int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }
//int lcm(int a, int b) { return a / gcd(a, b) * b; }
//int binpow(int a,int b){if(!b)return 1; if(b&1)return a*binpow(a,b-1)%mod; int x=binpow(a,b/2); return x*x%mod;}
signed main(){   
    ios_base::sync_with_stdio(0);   
    cin.tie(0);   
    cout.tie(0);
    int n, k;
    cin >> n >> k;
    int a[n+k+1];
    if(n+k<=18){
        for(int i=0;i<n+k;i++) cin >> a[i];
        for(int mask=0;mask<(1<<(n+k));mask++){
            vector < int > v;
            for(int i=0;i<n+k;i++){
                if(((mask>>i)&1)) v.pb(a[i]);
            }
            if(n!=v.size()) continue;
            bool b=0;
            for(int i=0;i<v.size()/2;i++){
                if(v[i]!=v[v.size()-i-1]) b=1;
            }
            if(b==0){
                for(auto to : v) cout << to << ' ';
                return 0;
            }
        }
    }
    for(int i=1;i<=n+k;i++) cin >> a[i];
    if(k==1){
        int l=1, r=n+k-1;
        bool b=0;
        int sum=a[l]+a[r];
        while(l<r){
            if(a[l]+a[r]==sum){ 
                l++; 
                r--;
            }
            else{ b=1; break;}
        }
        if(b==0){
            for(int i=1;i<n+k;i++) cout << a[i] << ' ';
            return 0;
        }
        l=2; r=n+k; sum=a[l]+a[r]; b=0;
        while(l<r){
            if(a[l]+a[r]==sum){ l++; r--;}
            else{ b=1; break;}
        }
        if(b==0){
            for(int i=2;i<=n+k;i++) cout << a[i] << ' ';
            return 0;
        }
        l=1; r=n+k; sum=a[l]+a[r]; b=0;
        while(l<r){
            if(a[l]+a[r]==sum){ l++; r--;}
            else{ b=1; break;}
        }
        if(b==0){
            for(int i=1;i<=n+k;i++){
                if((n+k+1)/2==i) continue;
                cout << a[i] << ' ';
            }
            return 0;
        }
        int pos1=0, pos2=0;
        l=1; r=n+k; sum=a[l]+a[r]; b=0;
        while(l<=r){
            if(a[l]+a[r]==sum){ l++; r--;}
            else{
                pos1=l;
                pos2=r;
                break;
            }
        }
        l=pos1; r=pos2-1; 
        while(l<=r){
            if(a[l]+a[r]==sum){l++; r--;}
            else{ b=1; break;}
        }
        if(b==0){
            for(int i=1;i<=n+k;i++){
                if(i==pos2) continue;
                cout << a[i] << ' ';
            }
            return 0;
        }
        for(int i=1;i<=n+k;i++){
            if(i==pos1) continue;
            cout << a[i] << ' ';
        }
    }
    else{
        while(true){
            random_shuffle(a+1, a+n+k+1);
            vector < int > v;
            for(int i=1;i<=n;i++) v.pb(a[i]);
            sort(v.begin(), v.end());
            bool bo=0;
            int sum=v[0]+v[v.size()-1];
            for(int i=0;i<v.size()/2;i++){
                if(v[i]+v[v.size()-i-1]!=sum){bo=1; break;}
            }
            if(bo==0){
                for(auto to : v) cout << to << ' ';
                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...