Submission #1057657

#TimeUsernameProblemLanguageResultExecution timeMemory
1057657vjudge1Sirni (COCI17_sirni)C++17
140 / 140
2988 ms397068 KiB
#include <bits/stdc++.h>

using namespace std;

#define task "test"
#define FOR(i, a, b) for(int i = (a); i <= (b); ++i)
#define FORD(i, a, b) for(int i = (a); i >= (b); --i)
#define sz(a) (int)(a).size()
#define all(a) (a).begin(), (a).end()
#define bit(s, i) (((s) >> (i)) & 1)
#define ii pair <int, int>
#define vii vector <ii>
#define vi vector <int>
#define fi first
#define se second
#define ll long long
#define eb emplace_back
#define pb push_back
#define __builtin_popcount __builtin_popcountll

void solve();

int32_t main() {
    if(fopen(task".inp", "r")) {
		freopen(task".inp", "r", stdin);
		freopen(task".out", "w", stdout);
	}
	cin.tie(0)->sync_with_stdio(0);

    int tc = 1; // cin >> tc;
    FOR(i, 1, tc) {
        solve();
    }
}

const int N = 1e5+5;

int n;
vi a;
vector <pair<ii, int>> edges;

struct DSU {
    int p[N];

    DSU () {
        fill(begin(p), end(p), 0);
    }

    int find(int a) {
        return (p[a] == 0) ? a : p[a] = find(p[a]);
    }

    void unite(int a, int b) {
        a = find(a); b = find(b);
        if(a != b) {
            p[b] = a;
        }
    }
} dsu;

void solve() {
    cin >> n;
    FOR(i, 1, n) {
        int x; cin >> x;
        a.eb(x);
    }

    sort(all(a));
    a.erase(unique(all(a)), a.end());

    FOR(i, 0, sz(a)-1) {
        FOR(j, 2, a.back() / a[i]) {
            int r = lower_bound(all(a), a[i]*j) - a.begin();

            if(r < sz(a)) {
                edges.pb({{i, r}, a[r] % a[i]});
                j = a[r] / a[i];
            }
        }
    }

    FOR(i, 1, sz(a) - 1) edges.pb({{i-1, i}, a[i] % a[i-1]});
    sort(all(edges), [] (pair <ii, int> x, pair <ii, int> y) {return x.se < y.se;});

    ll cost = 0;
    FOR(i, 0, sz(edges)-1) {
        int u = edges[i].fi.fi, v = edges[i].fi.se, w = edges[i].se;
        ++u; ++v;
        if(dsu.find(u) != dsu.find(v)) {
            dsu.unite(u, v);
            cost += w;
        }
    }

    cout << cost;
}

Compilation message (stderr)

sirni.cpp: In function 'int32_t main()':
sirni.cpp:25:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |   freopen(task".inp", "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sirni.cpp:26:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |   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...