Submission #1264908

#TimeUsernameProblemLanguageResultExecution timeMemory
1264908menkhSirni (COCI17_sirni)C++17
140 / 140
4233 ms395328 KiB
#include <bits/stdc++.h>
using namespace std;

#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, b, a) for (int i = (b), _a = (a); i >= _a; i--)
#define REP(i, n) for (int i = 0, _n = (n); i < _n; i++)

#define MAX 100005
int parent[MAX];
int n, Max = 0;

struct menkh {
    int u, v, w;
};

vector<menkh> adj;

int root(int v) {
    return v == parent[v] ? v : parent[v] = root(parent[v]);
}

bool unite(int u, int v) {
    u = root(u), v = root(v); 
    if (u == v) return false;
    parent[v] = u;
    return true;
}

void solve() {
    scanf("%d", &n); 
    vector<int> p(n + 1);
    FOR(i, 1, n) {
        scanf("%d", &p[i]); 
        Max = max(p[i], Max);
    }

    sort(p.begin() + 1, p.end());
    p.erase(unique(p.begin() + 1, p.end()), p.end());
    n = p.size() - 1;
    FOR(i, 1, n) parent[i] = i;

    FOR(i, 1, n) {
        for (int k = 1; k * p[i] <= Max; k++) {
            int v = lower_bound(p.begin() + 1, p.begin() + n + 1, k * p[i]) - p.begin();
            if (v == i) v = i + 1;
            if (v > n) break;
            if (p[v] <= (k + 1) * p[i]) adj.push_back({i, v, p[v] % p[i]});
        }
    }

    sort(adj.begin(), adj.end(), [](menkh A, menkh B) {
        return A.w < B.w;
    });

    long long answer = 0;
    REP(i, (int)adj.size()) {
        if (unite(adj[i].u, adj[i].v)) answer += adj[i].w;
    }

    printf("%lld\n", answer);
}

int main() {
    solve();
}

Compilation message (stderr)

sirni.cpp: In function 'void solve()':
sirni.cpp:30:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
sirni.cpp:33:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |         scanf("%d", &p[i]);
      |         ~~~~~^~~~~~~~~~~~~
#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...