Submission #1057635

#TimeUsernameProblemLanguageResultExecution timeMemory
1057635vjudge1Sirni (COCI17_sirni)C++17
140 / 140
2173 ms545052 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define all(s) s.begin(), s.end() const int ar = 1e7+2; const ll mod = 1e9+7; const int oo = 1e9; int n, x, ma = 0; vector <int> a; #define set3 pair <int, int> vector <set3> edge[ar]; int lab[ar]; int find_set(int v) { return lab[v] < 0 ? v : lab[v] = find_set(lab[v]); } bool union_sets(int a, int b) { a = find_set(a); b = find_set(b); if (a != b) { if (lab[a] > lab[b]) swap(a, b); lab[a] += lab[b]; lab[b] = a; return 1; } return 0; } bool check[ar]; int main() { ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); #define task "MODST" if(fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } cin >> n; a.push_back(0); for(int i = 1; i <= n; ++i) { cin >> x; a.push_back(x); ma = max(ma, x); } sort(all(a)); a.resize(unique(all(a)) - a.begin()); n = a.size() - 1; for(int i = 1; i <= n; ++i) { lab[i] = -1; vector <int> ex; if(i < n) { check[i + 1] = 1; ex.push_back(i + 1), edge[a[i + 1] % a[i]].push_back({i, i + 1}); } for(int j = a[i] * 2; j <= ma; j += a[i]) { int p = lower_bound(all(a), j) - a.begin(); if(p <= n && !check[p]) check[p] = 1, ex.push_back(p), edge[a[p] % a[i]].push_back({i, p}); } for(auto x : ex) check[x] = 0; } ll res = 0; for(int i = 0; i <= ma; ++i) if(edge[i].size()) for(auto &[u, v] : edge[i]) if(union_sets(u, v)) res += i; cout << res; return 0; }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:44:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sirni.cpp:45:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...