Submission #582426

#TimeUsernameProblemLanguageResultExecution timeMemory
582426Ronin13Sirni (COCI17_sirni)C++14
140 / 140
3110 ms616620 KiB
#include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define f first #define s second #define pii pair<int,int> #define pll pair<ll,ll> #define pb push_back #define epb emplace_back using namespace std; void lastshot(){ cout << "FUCK THIS SHIT I'M OUT!\n"; } void debug(){ cout << "WHAT A STUPID\n"; } //WELCOME TO PROJECT MAYHEM // rule #1: You don't ask questions about project MAYHEM // rule #2: You don't ask questions about project MAYHEM const int PMAX = 1e7 + 5; const int NMAX = 2e5 + 1; int p[PMAX]; int last[PMAX]; int par[NMAX]; int sz[NMAX]; vector <vector <pii> > edges(PMAX); void make_set(int v){ par[v] = v; sz[v] = 1; } int find_set(int v){ return par[v] == v ? v : par[v] = find_set(par[v]); } void union_sets(int a, int b){ a = find_set(a); b = find_set(b); if(a != b){ if(sz[a] < sz[b]) swap(a, b); par[b] = a; sz[a] += sz[b]; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; set <int> st; for(int i = 1; i <= n; i++){ int x; cin >> x; st.insert(x); } int ind = 0; for(int to : st){ p[to] = ++ind; } int l = 10000001; for(int i = 10000000; i >= 1; i--){ if(p[i]) last[i] = i, l = i; else last[i] = l; } // cout << 1; ind = 1; for(int to : st){ int x = last[to + 1]; if(x < 2 * to && x < 1e7 + 1) edges[x - to].pb({p[x], ind}); for(int i = 2 * to; i <= 1e7; i += to){ x = last[i]; if(x > 1e7) break; if(x > 1e7 || x >= i + to) continue; edges[x - i].pb({p[x], ind}); } ind++; } //cout << 1; for(int i = 1; i < ind; i++){ make_set(i); } // sort(edges.begin(), edges.end()); ll sum = 0; int cnt = 0; for(int i = 0; i < PMAX; i++){ for(auto to : edges[i]){ int x = to.f, y = to.s; //cout << find_set(x) << ' ' << find_set(y) << "\n"; if(find_set(x) == find_set(y)) continue; sum += (ll)i; union_sets(x, y); } } cout << sum; return 0; }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:88:9: warning: unused variable 'cnt' [-Wunused-variable]
   88 |     int cnt = 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...