답안 #547283

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
547283 2022-04-10T08:54:40 Z AA_Surely Sirni (COCI17_sirni) C++17
0 / 140
380 ms 68188 KB
#include <bits/stdc++.h>

#define FOR(i,x,n) 	for(int i=x; i<n; i++)
#define F0R(i,n) 	FOR(i,0,n)
#define ROF(i,x,n) 	for(int i=n-1; i>=x; i--)
#define R0F(i,n) 	ROF(i,0,n)

#define WTF 		cout << "WTF" << endl

#define IOS 		ios::sync_with_stdio(false); cin.tie(0)
#define F 			first
#define S	 		second
#define pb 			push_back

#define ALL(x) 		x.begin(), x.end()
#define RALL(x) 	x.rbegin(), x.rend()

using namespace std;
typedef long long 		LL;

typedef pair<int, int> 	PII;
typedef pair<LL, LL> 	PLL;

typedef vector<int> 	VI;
typedef vector<LL> 		VLL;
typedef vector<PII> 	VPII;
typedef vector<PLL> 	VPLL;

const int N = 1e5 + 7;
const int A = 1e7 + 7;
const int ALPHA = 27;
const int INF = 1e9 + 7;
const int MOD = 1e9 + 7;
const int LOG = 22;

struct Edge {
    int u, v, w;

    inline bool operator < (const Edge other) {
        return w < other.w;
    }
} eset[A];

int n, era[A];
int par[N];

int grand(int x) {
    if (par[x] < 0) return x;
    return par[x] = grand(par[x]);
}

inline bool merge(int a, int b) {
    a = grand(a); b = grand(b);
    if (a == b) return 0;

    if (par[a] > par[b]) swap(a, b);
    par[a] += par[b];
    par[b] = a;

    return 1;
}

int main() {
    IOS;

    fill(era, era + A, -1);
    
    cin >> n;
    VI ns(n);
    F0R(i, n) cin >> ns[i];

    sort(ALL(ns));
    ns.resize(unique(ALL(ns)) - ns.begin());
    n = ns.size();

    F0R(i, n) era[ ns[i] ] = i;
    R0F(i, A - 1) if (era[i] == -1)
        era[i] = era[i + 1];
    
    int fre = 0;
    F0R(i, n) for(int j = ns[i]; j < A; j += ns[i]) if (era[j] != -1) {
        eset[fre].u = i; eset[fre].v = era[j];
        eset[fre].w = ns[ era[j] ] % ns[i];
        fre++;
    }

    sort(eset, eset + fre);
    fill(par, par + n, -1);
    
    LL ans = 0;
    F0R(i, fre) if (merge(eset[i].u, eset[i].v)) ans += eset[i].w;
    cout << ans;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 41 ms 39464 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 87 ms 39548 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 40 ms 39480 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 192 ms 53296 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 73 ms 41724 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 380 ms 68188 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 253 ms 44308 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 144 ms 56740 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 169 ms 62696 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 63 ms 41884 KB Output isn't correct
2 Halted 0 ms 0 KB -