제출 #136374

#제출 시각아이디문제언어결과실행 시간메모리
136374darkkcyanSirni (COCI17_sirni)C++14
0 / 140
487 ms67220 KiB
#include <bits/stdc++.h> using namespace std; using namespace std::placeholders; // #define rand __rand // mt19937 rand(chrono::system_clock::now().time_since_epoch().count()); // or mt19937_64 #define llong long long #define xx first #define yy second #define len(x) ((int)x.size()) #define rep(i,n) for (int i = -1; ++ i < n; ) #define rep1(i,n) for (int i = 0; i ++ < n; ) #define all(x) x.begin(), x.end() template<class T> using min_priority_queue = priority_queue<T, vector<T>, greater<T>>; #define maxn 101010 int n; int a[maxn]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; rep(i, n) cin >> a[i]; sort(a, a + n); n = (int)(unique(a, a + n) - a); min_priority_queue<tuple<int, int, int*>> pq; rep(i, n) { for (int k = 1; k * a[i] <= a[n - 1]; ++k) { auto t = lower_bound(a, a + n, k * a[i]); if (t == a + n or *t / a[i] != k) continue; pq.push({*t % a[i], a[i], t}); } } llong ans = 0; for (int m = 2 * n - 1; m--; ) { int cost, src; int* ptr; tie(cost, src, ptr) = pq.top(); pq.pop(); ans += cost; int div = *ptr / src; ++ptr; if (ptr == a + n or *ptr / src != div) continue; pq.push({*ptr % src, src, ptr}); } cout << ans; 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...