제출 #1092862

#제출 시각아이디문제언어결과실행 시간메모리
1092862vjudge1Sirni (COCI17_sirni)C++14
0 / 140
869 ms110476 KiB
#include <bits/stdc++.h> using namespace std; int n; int a[100005]; struct pi { int w, u, v; }; bool cmp(pi a, pi b) { if (a.w <= b.w) return true; return false; } int par[100005]; int fid(int x) { if (par[x] == x) return x; return par[x] = fid(par[x]); } bool make_pair(int x, int y) { int u = fid(x); int v = fid(y); if (u == v) return false; par[v] = u; return true; } vector<pi> v; int nxt[10000007]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n; i++) par[i] = i; sort(a, a + n); for (int i = 0; i < n - 1; i++) { nxt[a[i]] = i; for (int j = a[i] + 1; j < a[i + 1]; j++) nxt[j] = i + 1; } nxt[a[n - 1]] = n - 1; for (int i = 0; i < n; i++) { v.push_back({a[nxt[a[i] + 1]] % a[i], i, nxt[a[i] + 1]}); for (int mul = 2 * a[i]; mul <= a[n - 1]; mul += a[i]) { v.push_back({a[nxt[mul]] % a[i], i, nxt[mul]}); mul = a[nxt[mul]] / a[i] * a[i]; } } sort(v.begin(), v.end(), cmp); long long ans = 0; for (auto x : v) { if (make_pair(x.u, x.v)) ans += x.w; } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...