Submission #1057659

#TimeUsernameProblemLanguageResultExecution timeMemory
1057659vjudge1Sirni (COCI17_sirni)C++17
140 / 140
1362 ms770124 KiB
#include <bits/stdc++.h> #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define REV(i, b, a) for(int i = (b); i >= (a); --i) #define REP(i, n) for(int i = 0; i < (n); ++i) #define ll long long #define fi first #define se second using namespace std; const int N = 1e5 + 5; int n; int fa[N]; vector<int> ve; void solve(int tc) { // cout << "Case #" << tc << ": "; cin >> n; REP(i, n) { int x; cin >> x; ve.emplace_back(x); } sort(ve.begin(), ve.end()); ve.resize(unique(ve.begin(), ve.end()) - ve.begin()); n = ve.size(); function<int(int)> root = [&](int x) -> int { if(x == fa[x]) return x; return fa[x] = root(fa[x]); }; function<bool(int, int)> join = [&](int u, int v) -> bool { u = root(u); v = root(v); if(u == v) return false; fa[root(u)] = root(v); return true; }; REP(i, n) fa[i] = i; int lim = ve.back(); vector<int> pos(lim + 1, -1); REP(i, n) { pos[ve[i]] = i; } for(int i = lim - 1; i >= 0; --i) { if(pos[i] == -1) pos[i] = pos[i + 1]; } vector<vector<pair<int, int>>> edge(lim); REP(i, n - 1) { edge[ve[i + 1] % ve[i]].emplace_back(i, i + 1); for(int j = 2 * ve[i]; j <= lim; j += ve[i]) { int nxt = pos[j]; edge[ve[nxt] % ve[i]].emplace_back(i, nxt); } } int ans = 0; FOR(i, 0, lim - 1) { for(auto e : edge[i]) { if(join(e.fi, e.se)) { ans += i; } } } cout << ans << '\n'; return; } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(int i = 1; i <= tc; ++i) solve(i); 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...