/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 82ms 16.723 MiB
#2 Accepted 85ms 16.773 MiB
#3 Accepted 74ms 16.848 MiB
#4 Accepted 76ms 16.766 MiB
#5 Accepted 93ms 16.762 MiB
#6 Accepted 112ms 16.898 MiB
#7 Accepted 110ms 16.914 MiB
#8 Accepted 89ms 16.77 MiB
#9 Accepted 87ms 16.676 MiB
#10 Accepted 85ms 16.773 MiB
#11 Accepted 82ms 16.789 MiB
#12 Accepted 74ms 16.797 MiB
#13 Accepted 100ms 16.898 MiB
#14 Accepted 115ms 16.781 MiB
#15 Accepted 129ms 17.016 MiB
#16 Accepted 122ms 17.082 MiB
#17 Accepted 257ms 17.645 MiB
#18 Accepted 91ms 16.938 MiB
#19 Accepted 110ms 17.105 MiB
#20 Accepted 134ms 17.09 MiB
#21 Accepted 129ms 17.039 MiB
#22 Accepted 112ms 17.035 MiB
#23 Accepted 123ms 17.281 MiB
#24 Accepted 121ms 17.027 MiB
#25 Accepted 109ms 16.895 MiB
#26 Accepted 140ms 17.02 MiB
#27 Accepted 145ms 17.117 MiB
#28 Accepted 126ms 16.93 MiB
#29 Accepted 109ms 17.004 MiB
#30 Accepted 140ms 17.453 MiB
#31 Accepted 143ms 17.645 MiB
#32 Accepted 124ms 17.004 MiB
#33 Accepted 141ms 17.754 MiB
#34 Accepted 100ms 16.988 MiB
#35 Accepted 214ms 17.723 MiB

Code

/*
 *   Copyright (c) 2024 Emon Thakur
 *   All rights reserved.
 */
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using minheap = priority_queue<long long, vector<long long>, greater<long long>>;
typedef tree<int, null_type, greater_equal<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; // find_by_order, order_of_key

#define ll long long
#define ld long double
#define MOD 1000000007
#define pie 2*(acos(0.0))
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define pb push_back
#define endl '\n'
#define lcm(a,b) (a*b)/(__gcd<ll>(a,b))
#define print(v) for(auto e:v) cout<<e<<" "; cout<<endl;
#define printp(v) for(auto e:v) cout<<e.first<<" "<<e.second<<endl;
#define srt(v) sort(v.begin(),v.end())
#define rsrt(v) sort(v.rbegin(),v.rend())
#define life_is_a_race ios::sync_with_stdio(false); cin.tie(nullptr);

vector<vector<ll>> alldiv(100006);
void alldivisor()
{
    for(int i=1;i<=100000;i++) alldiv[i].push_back(1);
    for(int i=2;i<=100000;i++)
    {
        alldiv[i].push_back(i);
        for(int j=i+i;j<=100000;j+=i) alldiv[j].push_back(i);
    }
}

bool cmp(pair<ll,ll>&a,pair<ll,ll>&b) {return a>b;}

void solve(int tc)
{
    //cout<<"Case "<<tc<<": ";
    ll n; cin >> n;
    vector<ll> a(n);
    for(int i=0;i<n;i++) cin >> a[i];
    vector<ll> hash(100005);

    for(int i=0;i<n;i++)
    {
        for(auto e:alldiv[a[i]])
        {
            hash[e]++;
        }
    }

    vector<pair<ll,ll>> v;
    for(int i=1;i<=100000;i++)
    {
        if(hash[i] >= (n/2)) 
        {
            v.push_back({hash[i],i});
        }
    }

    sort(v.begin(),v.end(),cmp);
    ll ans = 2;

    int m = v.size();
    for(int i=0;i<m;i++)
    {
        //cout << v[i].first <<" "<< v[i].second<<endl;
        if(v[i].first < (n+1)/2) break;

        for(int j=i+1;j<m;j++)
        {
            //cout << v[j].first <<" "<<v[j].second<<endl;
            if(v[j].first < n/2) break;
            ll lcmm = lcm(v[i].second,v[j].second);
            ll cnt;
            if(lcmm > 100000) cnt = 0;
            else cnt = hash[lcmm];

            if(v[i].first + v[j].first - cnt >= n) 
            {
                ans = max(ans , v[i].second + v[j].second);
            }
        }
    }

    cout << ans << endl;

    //for(int i=1;i<=10;i++) cout << i << " "<<hash[i]<<endl;
}
int main()
{
    //life_is_a_race
    alldivisor();
    int t=1; 
    cin>>t;
    for(int i=1;i<=t;i++) solve(i);
}

Information

Submit By
Type
Submission
Problem
P1077 Even Odd GCD (Hard Version)
Language
C++20 (G++ 13.2.0)
Submit At
2024-08-13 09:41:48
Judged At
2024-08-13 09:41:48
Judged By
Score
100
Total Time
257ms
Peak Memory
17.754 MiB