Submission #1355722

#TimeUsernameProblemLanguageResultExecution timeMemory
1355722Huseyn123Sirni (COCI17_sirni)C++17
140 / 140
4884 ms466280 KiB
#include <bits/stdc++.h>
#define MAX 51
#define INF INT_MAX
//#define int long long
using namespace std;
inline void USACO(string filename) {
    freopen((filename + ".in").c_str(), "r", stdin);
    freopen((filename + ".out").c_str(), "w", stdout);
}
vector<int> e;
int get(int x){
    if(e[x]<0){
        return x;
    }
    return e[x]=get(e[x]);
}
bool same_set(int x,int y){
    x=get(x);
    y=get(y);
    return (x==y);
}
int mx=1;
bool unite(int x,int y){
    x=get(x);
    y=get(y);
    if(x==y){
        return false;
    }
    if(e[x]>e[y]){
        swap(x,y);
    }
    e[x]+=e[y];
    e[y]=x;
    return true;
}
void solve(){
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    sort(a.begin(),a.end());
    a.erase(unique(a.begin(),a.end()),a.end());
    int mx=a[n-1];
    vector<int> bs(mx+1,0);
    vector<array<int,3>> c;
    for(int i=0;i<n;i++){
        bs[a[i]]=a[i];
    }
    for(int i=mx;i>=1;i--){
        if(bs[i]==0){
            bs[i]=bs[i+1];
        }
    }
    for(int i=0;i<n;i++){
        if(a[i]!=mx){
            c.push_back({bs[a[i]+1]%a[i],a[i],bs[a[i]+1]});
        }
        for(int j=2*a[i];j<=mx;j+=a[i]){
            if(bs[j]>=j+a[i]){
                continue;
            }
            c.push_back({bs[j]%a[i],a[i],bs[j]});
        }
    }
    long long res=0;
    e.resize(mx+1,-1);
    sort(c.begin(),c.end());
    for(auto x:c){
        if(unite(x[1],x[2])){
            res+=x[0];
        }
    }
    cout << res;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t=1;
    //cin >> t;
    while(t--){
        solve();
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...