답안 #1106078

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1106078 2024-10-29T07:27:27 Z nasir_bashirov Sirni (COCI17_sirni) C++11
98 / 140
5000 ms 401540 KB
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define vi vector<int>
#define vl vector<ll>
#define vii vector<pii>
#define db long double
#define vll vector<pll>
#define endl '\n'
#define all(x) x.begin(), x.end()
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

// #define int long long

struct DSU{
    vi par;
    int components;
    DSU(int sz){
        components = sz;
        par.resize(sz + 5, -1);
    }
    int Find(int u){
        if(par[u] < 0)   return u;
        else    return par[u] = Find(par[u]);
    }
    bool Union(int u, int v){
        u = Find(u), v = Find(v);
        if(u != v){
            if(par[u] < par[v]){
                swap(u, v);
            }
            par[u] += par[v];
            par[v] = u;
            components--;
            return true;
        }
        else{
            return false;
        }
    }
};

const int sz = 1e5 + 5;
int n, a[sz], mx;
ll res = 0;

void fmain(){
    fastio;
    cin >> n;
    set<int> st;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        mx = max(mx, a[i]);
        st.insert(a[i]);
    }
    vector<pair<int, pii>> v;
    for(int i : st){
        auto itt = st.upper_bound(i);
        int j = i * 2;
        if(itt != st.end()) v.push_back({min(*itt % i, i % *itt), {i, *itt}}), j = *itt / i * i;
        for(; j <= mx; j += i){
            auto it = st.lower_bound(j);
            if(it != st.end()){
                v.push_back({min(*it % i, i % *it), {i, *it}});
                j = *it / i * i;
            }
            else{
                break;
            }
        }
    }
    sort(all(v));
    DSU t(mx);
    for(auto i : v){
        res += i.first * t.Union(i.second.first, i.second.second);
    }
    cout << res;
}

signed main(){
    int tmr = 1;
    // cin >> tmr;
    while(tmr--){
        fmain();
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 39760 KB Output is correct
2 Correct 32 ms 41660 KB Output is correct
3 Correct 11 ms 39696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 592 KB Output is correct
2 Correct 16 ms 40388 KB Output is correct
3 Correct 11 ms 39696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 39760 KB Output is correct
2 Correct 8 ms 39504 KB Output is correct
3 Correct 9 ms 39696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 316 ms 31912 KB Output is correct
2 Correct 1075 ms 56224 KB Output is correct
3 Correct 384 ms 31144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 35 ms 7096 KB Output is correct
2 Correct 302 ms 52636 KB Output is correct
3 Correct 297 ms 31144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 669 ms 56504 KB Output is correct
2 Correct 1391 ms 105620 KB Output is correct
3 Correct 378 ms 31980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 103 ms 9376 KB Output is correct
2 Correct 1161 ms 104768 KB Output is correct
3 Correct 360 ms 31508 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 406 ms 61088 KB Output is correct
2 Execution timed out 5071 ms 401540 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 367 ms 61100 KB Output is correct
2 Execution timed out 5088 ms 400712 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 60 ms 42932 KB Output is correct
2 Execution timed out 5075 ms 400252 KB Time limit exceeded
3 Halted 0 ms 0 KB -