답안 #886886

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
886886 2023-12-13T06:22:47 Z beaboss Sirni (COCI17_sirni) C++14
42 / 140
678 ms 786436 KB
// Source: https://oj.uz/problem/view/COCI17_sirni
// 

#include "bits/stdc++.h"

using namespace std;

#define s second
#define f first
#define pb push_back

typedef long long ll;

typedef pair<ll, ll> pii;
typedef vector<pii> vpii;

typedef vector<ll> vi;

#define FOR(i, a, b) for (ll i = (a); i<b; i++)

bool ckmin(ll& a, ll b){ return b < a ? a = b, true : false; }

bool ckmax(ll& a, ll b){ return b > a ? a = b, true : false; }

set<ll> uni;

const ll P = 1e7 + 10;

vector<pair<ll, pii> > ed;

struct DSU {
	vector<ll> e;
	DSU(ll N) { e = vector<ll>(N, -1); }

	// get representive component (uses path compression)
	ll get(ll x) { return e[x] < 0 ? x : e[x] = get(e[x]); }

	bool same_set(ll a, ll b) { return get(a) == get(b); }

	ll size(ll x) { return -e[get(x)]; }

	bool unite(ll x, ll y) {  // union by size
		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;
	}
};

DSU dsu(P);

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	ll n;
	cin >> n;

	FOR(i, 1, n + 1) {
		ll k;
		cin >> k;
		uni.insert(k);
	}

	for (auto cur: uni) {
		for (auto val: uni) {
			ed.pb({min(cur % val, val % cur), {val, cur}});
		}
		// for (ll e = cur; e < P; e += cur) {
			

		// 	ll ub = e + cur - 1;

		// 	auto it = uni.upper_bound(ub);
		// 	if (it == uni.begin()) continue;
		// 	ll val = *prev(it, 1);
		// 	while (val >= e) {
		// 		ed.pb({val - e, {cur, val}});
		// 		ub = (e + val) / 2;

		// 		if (val == e) break;

		// 		it = uni.upper_bound(ub);
		// 		if (it == uni.begin()) break;
		// 		val = *prev(it, 1);
		// 	} 
		// }
	}

	sort(ed.begin(), ed.end());

	ll sz = 0;

	for (auto e: ed) {
		if (dsu.unite(e.s.s, e.s.f)) sz += e.f;
	}

	cout << sz << endl;


}












# 결과 실행 시간 메모리 Grader output
1 Correct 99 ms 104132 KB Output is correct
2 Correct 97 ms 104636 KB Output is correct
3 Correct 108 ms 103608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 104900 KB Output is correct
2 Correct 68 ms 93132 KB Output is correct
3 Correct 109 ms 104644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 108 ms 105156 KB Output is correct
2 Correct 90 ms 105404 KB Output is correct
3 Correct 110 ms 104248 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 678 ms 786432 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 496 ms 786436 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 597 ms 786432 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 550 ms 786432 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 615 ms 786432 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 610 ms 786432 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 506 ms 786432 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -