#include <bits/stdc++.h>
#define ar3 array<int, 3>
using namespace std;
const int N = 1e5 + 5, M = 1e7 + 5;
int n, cnt, pos[M], nxt[M], p[N], s[N], m, e, a[N];
long long ans;
vector<ar3> edge;
int get(int u){
return p[u] == u ? u : p[u] = get(p[u]);
}
void unite(int u, int v){
if (s[u] > s[v]) swap(u, v);
s[v] += s[u];
p[u] = v;
}
bool cmp(ar3 x, ar3 y){
return x[2] < y[2];
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
if (fopen("MODST.INP", "r")){
freopen("MODST.INP", "r", stdin);
freopen("MODST.OUT", "w", stdout);
}
cin >> n;
while (n--){
int x; cin >> x;
m = max(m, x);
if (!pos[x]) a[pos[x] = ++cnt] = x;
}
for (int i = 1; i <= cnt; ++i) p[i] = i, s[i] = 1;
for (int i = m; i > 0; --i)
if (pos[i + 1]) nxt[i] = i + 1;
else nxt[i] = nxt[i + 1];
for (int i = 1; i <= cnt; ++i)
for (int j = a[i]; j <= m; j += a[i]){
if (nxt[j])
edge.push_back({i, pos[nxt[j]], nxt[j] - j});
int x = get(i), y = get(pos[j]);
if (pos[j] && a[i] != j && x != y)
unite(x, y), ++e;
}
sort(edge.begin(), edge.end(), cmp);
if (e >= cnt - 1) cout << 0;
else {
for (ar3 x: edge){
int u = get(x[0]), v = get(x[1]), w = x[2];
if (u == v) continue;
unite(u, v);
++e;
ans += w;
if (e == cnt - 1) break;
}
cout << ans;
}
}
컴파일 시 표준 에러 (stderr) 메시지
sirni.cpp: In function 'int main()':
sirni.cpp:22:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
22 | freopen("MODST.INP", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sirni.cpp:23:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
23 | freopen("MODST.OUT", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |