제출 #668140

#제출 시각아이디문제언어결과실행 시간메모리
668140definitelynotmeeTable Tennis (info1cup20_tabletennis)C++98
72 / 100
3060 ms43828 KiB
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define all(x) x.begin(), x.end()
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
template<typename T>
using matrix = vector<vector<T>>;

struct hashzao{
    int operator()(const int& i) const{
        return i^981723478;
    }
};


int main(){
    cin.tie(0)->sync_with_stdio(0);

    int n, k;
    cin >> n >> k;

    vector<int> v(n+k);
    for(int i = 0; i < n+k; i++)
        cin >> v[i];

    unordered_map<int,int,hashzao> sums;

    int minmid = max(0,(n+k)/2-k/2-3), maxmid = min(n+k-1,(n+k)/2+k/2+3);

    for(int offset = -k; offset <= k; offset++){
        for(int i = 0; i < n+k; i++){
            int y = n+k-i-1;
            y+=offset;
            if(y >= 0 && y < n+k)
                sums[v[i]+v[y]]++;
        }
    }

    auto findans =[&](int sum){
        int p1 = 0, p2 = n+k-1;
        vector<int> resp;

        while(p1 < p2){
            if(v[p1] + v[p2] > sum){
                p2--;
                continue;
            }
            if(v[p1] + v[p2] < sum){
                p1++;
                continue;
            }
            resp.push_back(v[p1]), resp.push_back(v[p2]);
            p1++, p2--;
        }

        sort(all(resp));
        for(int i = 0; i < n; i++)
            cout << resp[i] << ' ';
        cout << '\n';
    };

    // for(pii i : sums)
    //     cout << i.ff << ' ' << i.ss << '\n';

    for(pii i : sums){
        if(i.ss < n)
            continue;
        int sum = i.ff;
        int resp = 0;
        int p1 = 0, p2 = n+k-1;

        while(p1 < p2){
            if(v[p1] + v[p2] > sum){
                p2--;
                continue;
            }
            if(v[p1] + v[p2] < sum){
                p1++;
                continue;
            }

            p1++, p2--;
            resp++;
        }
        //cout << sum << ' ' << resp << '\n';
        if(resp >= n/2){
            findans(sum);
            return 0;
        }
    }
    //exit(1);

}

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

tabletennis.cpp: In function 'int main()':
tabletennis.cpp:31:9: warning: unused variable 'minmid' [-Wunused-variable]
   31 |     int minmid = max(0,(n+k)/2-k/2-3), maxmid = min(n+k-1,(n+k)/2+k/2+3);
      |         ^~~~~~
tabletennis.cpp:31:40: warning: unused variable 'maxmid' [-Wunused-variable]
   31 |     int minmid = max(0,(n+k)/2-k/2-3), maxmid = min(n+k-1,(n+k)/2+k/2+3);
      |                                        ^~~~~~
#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...