제출 #1174236

#제출 시각아이디문제언어결과실행 시간메모리
1174236InvMODSirni (COCI17_sirni)C++20
84 / 140
5118 ms828372 KiB
#include<bits/stdc++.h> using namespace std; #define sz(v) (int)(v).size() #define all(v) (v).begin(), (v).end() #define compact(v) (v).erase(unique(all(v)), (v).end()) using ll = long long; const int N = 1e5, M = 1e7 + 1; int n, i, nxt, par[N], answer, near[M]; int asc(int x){ if(par[x] < 0) return x; return par[x] = asc(par[x]); } void join(int u, int v, int w){ u = asc(u), v = asc(v); if(u != v){ par[v] = u; answer += w; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; vector<int> a(n); for(i = 0; i < n; i++){ cin >> a[i]; } sort(all(a)), compact(a); for(i = 0; i < sz(a); i++){ near[a[i]] = i; par[i] = -1; } for(i = a.back(); i > a[0] + 1; i--){ near[i - 1] = (!near[i - 1] ? near[i] : near[i - 1]); } vector<pair<int, pair<int,int>>> E; for(i = sz(a) - 2; i >= 0; i--){ E.push_back(make_pair(a[i + 1] % a[i], make_pair(i, i + 1))); for(nxt = a[i] * 2; nxt <= a.back(); nxt += a[i]){ E.push_back(make_pair(a[near[nxt]] % a[i], make_pair(i, near[nxt]))); } } sort(all(E)); for(auto e : E){ join(e.second.first, e.second.second, e.first); } cout << answer << "\n"; 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...