/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 138ms 16.73 MiB
#2 Accepted 151ms 16.828 MiB
#3 Accepted 139ms 16.895 MiB
#4 Accepted 103ms 16.852 MiB
#5 Accepted 113ms 16.715 MiB
#6 Accepted 143ms 16.891 MiB
#7 Accepted 133ms 17.039 MiB
#8 Accepted 107ms 16.812 MiB
#9 Accepted 107ms 16.895 MiB
#10 Accepted 130ms 16.824 MiB
#11 Accepted 121ms 16.77 MiB
#12 Accepted 141ms 16.742 MiB
#13 Accepted 110ms 16.898 MiB
#14 Accepted 126ms 16.703 MiB
#15 Accepted 152ms 16.969 MiB
#16 Accepted 160ms 17.117 MiB
#17 Accepted 412ms 17.664 MiB
#18 Accepted 101ms 16.746 MiB
#19 Accepted 156ms 17.105 MiB
#20 Accepted 142ms 17.09 MiB
#21 Accepted 148ms 17.039 MiB
#22 Accepted 153ms 17.109 MiB
#23 Accepted 167ms 16.926 MiB
#24 Accepted 160ms 17.109 MiB
#25 Accepted 157ms 17.027 MiB
#26 Accepted 186ms 17.137 MiB
#27 Accepted 164ms 17.062 MiB
#28 Accepted 156ms 17.141 MiB
#29 Accepted 169ms 17.008 MiB
#30 Accepted 244ms 17.66 MiB
#31 Accepted 223ms 17.66 MiB
#32 Accepted 137ms 17.066 MiB
#33 Accepted 174ms 17.621 MiB
#34 Accepted 111ms 17.008 MiB
#35 Accepted 353ms 17.66 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:54:20
Judged At
2024-08-14 12:44:31
Judged By
Score
100
Total Time
412ms
Peak Memory
17.664 MiB