Submission #1106085

#TimeUsernameProblemLanguageResultExecution timeMemory
1106085nasir_bashirovSirni (COCI17_sirni)C++17
140 / 140
2409 ms573832 KiB
// #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define vi vector<int> #define vl vector<ll> #define vii vector<pii> #define db long double #define vll vector<pll> #define endl '\n' #define all(x) x.begin(), x.end() #define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // #define int long long struct DSU{ vi par; int components; DSU(int sz){ components = sz; par.resize(sz + 5, -1); } int Find(int u){ if(par[u] < 0) return u; else return par[u] = Find(par[u]); } bool Union(int u, int v){ u = Find(u), v = Find(v); if(u != v){ if(par[u] < par[v]){ swap(u, v); } par[u] += par[v]; par[v] = u; components--; return true; } else{ return false; } } }; const int sz = 1e5 + 5; int n, res; vi a(sz, 0); vii g[10000005]; void fmain(){ fastio; cin >> n; for(int i = 1; i <= n; i++){ cin >> a[i]; } sort(a.begin() + 1, a.begin() + n + 1); vector<pair<int, pii>> v; for(int i = 1; i <= n; i++){ if(a[i] == a[i - 1]) continue; for(int j = a[i]; j <= a[n]; j += a[i]){ int ind = (j == a[i] ? upper_bound(a.begin() + 1, a.begin() + n + 1, j) : lower_bound(a.begin() + 1, a.begin() + n + 1, j)) - a.begin(); // cout << ind << endl; if(ind > n) break; // cout << i << " " << j << endl; g[a[ind] % a[i]].push_back({a[ind], a[i]}); j = a[ind] / a[i] * a[i]; } } DSU t(a[n]); for(int i = 0; i <= 1e7; i++){ for(pii j : g[i]){ res += t.Union(j.first, j.second) * i; } } cout << res; } signed main(){ int tmr = 1; // cin >> tmr; while(tmr--){ fmain(); } }
#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...