Submission #1139297

#TimeUsernameProblemLanguageResultExecution timeMemory
1139297ChottuFSirni (COCI17_sirni)C++20
0 / 140
93 ms20668 KiB
#include <bits/stdc++.h> using namespace std; #define int long long struct DSU { vector<int> parent, sz; DSU(int n) { parent.resize(n); sz.resize(n, 1); for (int i = 0; i < n; ++i) parent[i] = i; } int find(int x) { return parent[x] == x ? x : parent[x] = find(parent[x]); } bool merge(int a, int b) { a = find(a); b = find(b); if (a == b) return false; if (sz[a] < sz[b]) swap(a, b); parent[b] = a; sz[a] += sz[b]; return true; } }; signed main() { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> arr(n); for (int i = 0; i < n; ++i) cin >> arr[i]; if (n == 1) { cout << 0; return 0; } sort(arr.begin(), arr.end()); DSU dsu(n); int m = arr[0]; int max_val = arr.back(); // Preprocess to find all elements unordered_map<int, vector<int>> value_indices; for (int i = 0; i < n; ++i) value_indices[arr[i]].push_back(i); for (int i = 0; i < n; ++i) { int x = arr[i]; if (x == 0) continue; for (int k = 2; x * k <= max_val; ++k) { int y = x * k; auto it = value_indices.find(y); if (it != value_indices.end()) { for (int idx : it->second) { dsu.merge(i, idx); } } } } // Collect components unordered_map<int, vector<int>> components; int m_root = -1; for (int i = 0; i < n; ++i) { int root = dsu.find(i); components[root].push_back(arr[i]); if (arr[i] == m) m_root = root; } if (components.size() == 1) { cout << 0; return 0; } int sum = 0; for (auto &[root, vals] : components) { if (root == m_root) continue; int min_mod = INT_MAX; for (int x : vals) { min_mod = min(min_mod, x % m); } sum += min_mod; } cout << sum; return 0; }
#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...