제출 #687536

#제출 시각아이디문제언어결과실행 시간메모리
687536vlad_TTTable Tennis (info1cup20_tabletennis)C++17
24 / 100
3089 ms9308 KiB
///solutie rares+vlad
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <set>

using namespace std;
long long v[150405];
unordered_map <long long,long long> f;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,k,suma;
    cin>>n>>k;
    for(int i=1;i<=n+k;i++)
    {
        cin>>v[i];
        f[v[i]]+=1;
    }
    if (n + k <= 18) {
      for (int mask = 1; mask < (1 << (n + k)); mask++) {
        if (__builtin_popcount(mask) == n) {
          vector<int> pos;
          for (int bit = 0; bit < n + k; bit++) {
            if (mask & (1 << bit)) pos.push_back(v[bit + 1]);
          }
          bool ok = 1;
          for (int i = 1; i < (n / 2); i++) {
            if (pos[i] + pos[n - i - 1] != pos[0] + pos[n - 1]) {
              ok = false;
            }
          }
          if (ok) {
            for (auto &it : pos) {
              cout << it << " ";
            }
            return 0;
          }
        }
      }
    }
    if(k==1) {
       ///cazul in care nu eliminam nici 1, nici n+k
        ///sort(v+1,v+k+n);
        suma=v[1]+v[n+k];
        int eliminat,cnteliminat=0;
        ///cout<<"suma="<<suma<<"\n";
        for(int i=2;i<n+k;i++)
        {
            if(f[suma-v[i]]==0||v[i]*2==suma)
            {
                cnteliminat++;
                ///cout<<"nu merge "<<v[i]<<"\n";
                eliminat=v[i];
            }
        }
        if(cnteliminat==1)
        {
            for(int i=1;i<=n+k;i++)
            {
                if(f[suma-v[i]]==1&&v[i]*2!=suma)
                cout<<v[i]<<" ";
            }
        }
        else
        {
            ///eliminam pe primul numar
            cnteliminat=0;
            suma=v[2]+v[n+k];
            for(int i=2;i<n+k;i++)
            {
                if(f[suma-v[i]]==0||v[i]*2==suma)
                {
                    cnteliminat++;
                    ///cout<<"nu merge "<<v[i]<<"\n";
                    eliminat=v[i];
                }
            }
            if(cnteliminat==0)
            {
                for(int i=2;i<=n+k;i++)
                    cout<<v[i]<<" ";
            }
            else
            {
                for(int i=1;i<n+k;i++)
                    cout<<v[i]<<" ";
            }
        }
    }

    auto dumb_cnt = [&](vector<int> v) {
      int cnt = 0;
      set<int> s;
      int sum = v[0] + v.back();
      for (auto &it : v) {
        s.insert(it);
      }
      for (auto &it : v) {
        cnt += s.count(sum - it);
      }
      return cnt / 2;
    };

    for (int i = 1; i <= n + k; i++) {
      for (int j = 1; j < i; j++) {
        vector<int> a;
        set<int> s;
        for (int k = j; k <= i; k++) {
          a.push_back(v[k]);
          s.insert(v[k]);
        }
        if (dumb_cnt(a) >= n / 2) {
          int p = 0, sum = a[0] + a.back();
          vector<int> output;
          int aux = (n / 2);
          while (aux > 0) {
            if (s.count(sum - a[p])) {
              aux--;
              output.push_back(a[p]);
              output.push_back(sum - a[p]);
            }
            p++;
          }
          sort(output.begin(), output.end());
          for (auto it : output) cout << it << " ";
          return 0;
        }
      }
    }
    return 0;
}

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

tabletennis.cpp: In function 'int main()':
tabletennis.cpp:49:13: warning: variable 'eliminat' set but not used [-Wunused-but-set-variable]
   49 |         int eliminat,cnteliminat=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...