제출 #1057701

#제출 시각아이디문제언어결과실행 시간메모리
1057701vjudge1Sirni (COCI17_sirni)C++17
56 / 140
3426 ms107044 KiB
// 027 072 207 270 702 720 #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define all(x) x.begin(), x.end() #define fo(i, a, b) for (int i = (a), b_ = (b); i <= b_; ++i) #define fod(i, a, b) for (int i = (a), b_ = (b); i >= b_; --i) #define rep(i, n) fo(i, 1, n) #define per(i, n) fod(i, n, 1) #define chmax(a, b) a = max(a, b) #define chmin(a, b) a = min(a, b) const int N = 1e6+5, M = 1e7+5; int n, a[N], nxt[N]; map<int, int> root; struct edge { int u, v, c; bool operator < (const edge &o) const { return c < o.c; } }; vector<edge> e; vector<int> z; inline int find(int u) { return (u == root[u] ? u : root[u] = find(root[u])); } void sol() { cin >> n; rep(i, n) cin >> a[i], z.pb(a[i]); sort(a+1, a+n+1); sort(all(z)); z.resize(unique(all(z))-begin(z)); int j = 0; rep(i, z.back()) { while (z[j] < i) j++; nxt[i] = z[j]; } for (int x : z) for (int y = x; y <= z.back(); y += x) { int p = nxt[(y==x?y+1:y)]; if (!p) break; if (y + x < p) y = (p - y) / x * x + y; e.pb({x, p, p - y}); } // dbg(z); for (int x : z) root[x] = x; sort(all(e)); ll ans = 0; for (edge ee : e) { int u = ee.u, v = ee.v, c = ee.c; // dbg(u, v, c); u = find(u), v = find(v); if (u != v) { root[u] = v; ans += c*1LL; } } cout << ans; } signed main() { cin.tie(0) -> sync_with_stdio(0); // if (fopen("A.inp", "r")) freopen("A.inp", "r", stdin); int tc = 1, test = 0; // cin >> tc; while (++test <= tc) sol(); }
#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...