# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
89212 | 2018-12-11T01:18:20 Z | jasony123123 | Sirni (COCI17_sirni) | C++11 | 5000 ms | 670344 KB |
#pragma GCC optimize ("O3") #pragma GCC target ("sse4") #define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> #include <unordered_map> //#include <ext/pb_ds/tree_policy.hpp> //#include <ext/pb_ds/assoc_container.hpp> using namespace std; //using namespace __gnu_pbds; #define FOR(i,start,end) for(int i=start;i<(int)(end);i++) #define FORE(i,start,end) for(int i=start;i<=(int)end;i++) #define RFOR(i,start,end) for(int i = start; i>end; i--) #define RFORE(i,start,end) for(int i = start; i>=end; i--) #define all(a) a.begin(), a.end() #define mt make_tuple #define v vector #define sf scanf #define pf printf #define dvar(x) cout << #x << " := " << x << "\n" #define darr(x,n) FOR(i,0,n) cout << #x << "[" << i << "]" << " := " << x[i] << "\n" typedef long long ll; typedef long double ld; typedef pair<int, int > pii; typedef pair<ll, ll> pll; //template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<class T> void minn(T &a, T b) { a = min(a, b); } template<class T> void maxx(T &a, T b) { a = max(a, b); } inline void io() { #ifdef LOCAL_PROJECT freopen("input.in", "r", stdin); freopen("output.out", "w", stdout); #else /* online submission */ #endif ios_base::sync_with_stdio(false); cin.tie(NULL); } /**************************COCI 2016-2017 R6 P4*************************/ template <int SZ> struct UF { int N; // Vertices 0...N-1 int par[SZ], compsz[SZ]; // parent of i, size of component UF() { FOR(i, 0, SZ) par[i] = i, compsz[i] = 1; } int find(int x) { // path compression if (par[x] != x) par[x] = find(par[x]); return par[x]; } bool unite(int x, int y) { // unite by rank. return TRUE if united. FALSE if already same component x = find(x), y = find(y); if (x == y) return false; if (compsz[x] < compsz[y]) swap(x, y); // now x is the larger component compsz[x] += compsz[y], par[y] = x; return true; } }; const int MAXP = 10000000; int N, M; v<int> P; v<int> nxt; v<pii> edgeSorted[MAXP]; UF<100000> uf; void input() { // input sf("%d", &N); P.resize(N); FOR(i, 0, N) sf("%d", &P[i]); sort(P.begin(), P.end()); P.erase(unique(P.begin(), P.end()), P.end()); N = P.size(); M = P.back(); } void comNxt() { nxt.resize(M + 1); // compute nxt for (int i = M, j = P.size() - 1; i >= P.front(); i--) { assert(j >= 0); if (j >= 0 && i == P[j]) nxt[i] = j--; else nxt[i] = nxt[i + 1]; } } void makeEd() { // compute edges FOR(i, 0, N) { pii e = { i, nxt[P[i] + 1] }; edgeSorted[P[e.second] % P[e.first]].push_back(e); for (int k = P[i] + P[i]; k <= M; k += P[i]) { e = { i, nxt[k] }; edgeSorted[P[e.second] % P[e.first]].push_back(e); } } } ll tree() { // mst int num = 0; ll mstcost = 0; FORE(c, 0, M) { for (pii e : edgeSorted[c]) { if (uf.unite(e.first, e.second)) { mstcost += (ll)(c); num++; } if (num == N - 1) { return mstcost; } } } assert(0); return mstcost; } int main() { io(); input(); comNxt(); makeEd(); cout << tree() << "\n"; return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 303 ms | 275268 KB | Output is correct |
2 | Correct | 745 ms | 304656 KB | Output is correct |
3 | Correct | 303 ms | 304656 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 235 ms | 304656 KB | Output is correct |
2 | Correct | 3718 ms | 670344 KB | Output is correct |
3 | Correct | 315 ms | 670344 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 322 ms | 670344 KB | Output is correct |
2 | Correct | 301 ms | 670344 KB | Output is correct |
3 | Correct | 303 ms | 670344 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 320 ms | 670344 KB | Output is correct |
2 | Correct | 443 ms | 670344 KB | Output is correct |
3 | Correct | 310 ms | 670344 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 263 ms | 670344 KB | Output is correct |
2 | Correct | 422 ms | 670344 KB | Output is correct |
3 | Correct | 322 ms | 670344 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 406 ms | 670344 KB | Output is correct |
2 | Correct | 447 ms | 670344 KB | Output is correct |
3 | Correct | 294 ms | 670344 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 277 ms | 670344 KB | Output is correct |
2 | Correct | 455 ms | 670344 KB | Output is correct |
3 | Correct | 329 ms | 670344 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 474 ms | 670344 KB | Output is correct |
2 | Correct | 4453 ms | 670344 KB | Output is correct |
3 | Correct | 532 ms | 670344 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 537 ms | 670344 KB | Output is correct |
2 | Execution timed out | 5125 ms | 670344 KB | Time limit exceeded |
3 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 334 ms | 670344 KB | Output is correct |
2 | Execution timed out | 5115 ms | 670344 KB | Time limit exceeded |
3 | Halted | 0 ms | 0 KB | - |