Submission #1154452

#TimeUsernameProblemLanguageResultExecution timeMemory
1154452windowwifeSirni (COCI17_sirni)C++20
140 / 140
1438 ms746256 KiB
#include<bits/stdc++.h> #define ll long long #define task "" using namespace std; const int maxn = 1e5 + 1, maxa = 1e7 + 2; int n, a, first[maxa]; ll res = 0; vector<int> v; vector<pair<int, int>> w[maxa]; struct DSU { vector<int> par; void init (int n) { par.resize(n + 1, -1); } int find_set (int u) { if (par[u] < 0) return u; return (par[u] = find_set(par[u])); } bool union_set (int u, int v) { int pu = find_set(u), pv = find_set(v); if (pu == pv) return false; if (par[pu] > par[pv]) swap(pu, pv); par[pu] += par[pv]; par[pv] = pu; return true; } }dsu; int main() { //freopen(task".INP", "r", stdin); //freopen(task".OUT", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i = 1; i <= n; i++) { cin >> a; v.push_back(a); } v.push_back(0); sort(v.begin(), v.end()); v.resize(unique(v.begin(), v.end()) - v.begin()); n = v.size() - 1; dsu.init(n); for (int i = 1; i <= n; i++) { first[v[i]] = i; } for (int i = v[n]; i > 0; i--) { if (first[i] == 0) { first[i] = first[i + 1]; } } for (int i = 1; i <= n; i++) { int x = v[i], k1 = first[x + 1]; if (k1 != 0) { int c = min(v[k1] % v[i], v[i] % v[k1]); w[c].push_back({i, k1}); } for (int j = 2*x; j <= v[n]; j += x) { int k = first[j]; if (k != 0) { int c = min(v[k] % v[i], v[i] % v[k]); w[c].push_back({i, k}); } } } for (int i = 0; i <= v[n]; i++) { for (pair<int, int> p : w[i]) { if (dsu.union_set(p.first, p.second)) { res += i; } } } cout << res; }
#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...