답안 #366252

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
366252 2021-02-13T16:11:53 Z Ahmad_Hasan Table Tennis (info1cup20_tabletennis) C++17
87 / 100
3000 ms 6892 KB
#include <bits/stdc++.h>
#define int long long
/**
     ||||||||||       |||||     |||||    ||||||||||
    |||||||||||||     |||||     |||||  |||||
   ||||     ||||||    |||||     |||||  |||||
  |||||||||||||||||   |||||||||||||||    ||||||||||
 |||||||||||||||||||  |||||||||||||||           |||||
 |||||         |||||  |||||     |||||           |||||
 |||||         |||||  |||||     |||||    ||||||||||
AHMED;HASSAN;SAEED;
*/

using namespace std;

int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);      cout.tie(0);
    int n,k;
    cin>>n>>k;
    vector<int>v(n+k);

    unordered_map<int,int >mp,mp2;
    int nn=n+k;
    for(int i=0;i<nn;i++){
        cin>>v[i];
    }

    vector<vector<pair<int,int> > >pos((k+5)*(k+5));
    vector<int>sums((k+5)*(k+5));
    unordered_map<int,int>vis;
    int cr=0;
    int f=0;
    int crsm;
    for(int i=0;i<nn&&i<k+2&&!f;i++){
        for(int j=nn-1;j>=0&&(nn-1-j)<=k+2-i&&!f;j--){
            int cnt=0;
            crsm=v[i]+v[j];
            if(vis[crsm])continue;
            vis[crsm]=1;
            for(int k=0;k<nn;k++){
                vector<int>::iterator it2=lower_bound(v.begin(),v.end(),crsm-v[k]);
                if(it2==v.end()||*it2!=crsm-v[k])continue;
                int vl=it2-v.begin();
                if(vl>k){
                    cnt++;
                    if(cnt>=n/2){
                        f=1;
                        break;
                    }

                }
            }
        }
    }
    int mxi=0;
    sums[0]=crsm;
    for(int j=0;j<1;j++){
        if(j<cr-1&&sums[j]==sums[j+1])continue;
        for(int i=0;i<nn;i++){
            vector<int>::iterator it2=lower_bound(v.begin(),v.end(),sums[j]-v[i]);
            if(it2==v.end()||*it2!=sums[j]-v[i])continue;
            int vl=it2-v.begin();
            if(vl>i){
                pos[j].push_back({i,vl});
                if(pos[j].size()>=n/2){
                    f=1;
                    break;
                }

            }
        }
    }
/**
    for(int i=0;i<pos.size();i++){
        for(int j=0;j<pos[i].size();j++){
            cout<<pos[i][j].first<<'-'<<pos[i][j].second<<' ';
        }
        cout<<'\n';
    }
*/
    for(int i=0;i<pos.size();i++)
        if(pos[i].size()>pos[mxi].size())
            mxi=i;
    vector<int>ans(n);
    int l=0,r=n-1;
    for(int i=0;i<pos[mxi].size()&&i<n/2;i++){
        ans[l]=(v[pos[mxi][i].first]);
        ans[r]=(v[pos[mxi][i].second]);
        l++;   r--;
    }
    for(int i=0;i<ans.size();i++)
        cout<<ans[i]<<' ';

    return 0;
}



/**
4 3
100000000000 200000000000 300000000000 400000000000 800000000000 1000000000000 2000000000000

*/

Compilation message

tabletennis.cpp: In function 'int32_t main()':
tabletennis.cpp:67:33: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   67 |                 if(pos[j].size()>=n/2){
      |                    ~~~~~~~~~~~~~^~~~~
tabletennis.cpp:83:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |     for(int i=0;i<pos.size();i++)
      |                 ~^~~~~~~~~~~
tabletennis.cpp:88:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |     for(int i=0;i<pos[mxi].size()&&i<n/2;i++){
      |                 ~^~~~~~~~~~~~~~~~
tabletennis.cpp:93:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |     for(int i=0;i<ans.size();i++)
      |                 ~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 1136 KB Output is correct
2 Correct 76 ms 5476 KB Output is correct
3 Correct 48 ms 5652 KB Output is correct
4 Correct 47 ms 5476 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 5600 KB Output is correct
2 Correct 58 ms 5476 KB Output is correct
3 Correct 116 ms 5520 KB Output is correct
4 Correct 53 ms 5476 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 620 KB Output is correct
2 Correct 17 ms 876 KB Output is correct
3 Correct 2 ms 620 KB Output is correct
4 Correct 12 ms 876 KB Output is correct
5 Correct 1 ms 620 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 17 ms 492 KB Output is correct
3 Correct 2 ms 492 KB Output is correct
4 Correct 8 ms 492 KB Output is correct
5 Correct 2 ms 492 KB Output is correct
6 Correct 4 ms 492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1868 ms 5808 KB Output is correct
3 Correct 133 ms 5476 KB Output is correct
4 Correct 1112 ms 5680 KB Output is correct
5 Correct 86 ms 5472 KB Output is correct
6 Correct 337 ms 5548 KB Output is correct
7 Correct 1196 ms 5548 KB Output is correct
8 Correct 88 ms 5472 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 5484 KB Output is correct
2 Execution timed out 3082 ms 6892 KB Time limit exceeded
3 Halted 0 ms 0 KB -