Submission #581801

#TimeUsernameProblemLanguageResultExecution timeMemory
5818013zpSirni (COCI17_sirni)C++17
84 / 140
1454 ms786432 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a[100009];
int p[100009],s[100009];
int N[10000009];
vector<pair<int,pair<int,int> > > E;
void ad(int x, int y){
    if(x != y)
    E.push_back({min(a[x]%a[y], a[y]%a[x]), {x,y}});
}
int P(int x){
    if(p[x] == x) return x;
    p[x] = P(p[x]);
    return p[x];
}
ll ans = 0;
void un(int x, int y, int z){
    x = P(x); y = P(y);
    if(x == y) return;
    if(s[x] > s[y]) swap(x, y);
    p[x] = y;
    s[x] += s[y];
    ans += z;
}
main(){
 
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        p[i] = i;
        s[i] = 1;
    }
    sort(a+1, a+n+1);
    vector<int> v;
    for(int i = 1;i  <= n; i++){
        if(a[i] == a[i-1]) continue;
        N[a[i]] = i;
        v.push_back(i);
    }
    for(int i = a[n]; i >= 0; i--){
        if(!N[i]) N[i] = N[i+1];
    }
    for(int i = 1; i < v.size(); i++){
        int x = v[i];
        for(int j = 0; j * a[x] <= a[n]; j++){
            int y = N[j*a[x]];
            if(y == x && a[y] < a[n]) y = N[a[y]+1];
            ad(x, y);
        }
    }
    sort(E.begin(), E.end());
    for(auto e: E){
        int x = e.second.first, y = e.second.second;
        un(x, y, e.first);
    }
 
    cout << ans << endl;
 
}

Compilation message (stderr)

sirni.cpp:26:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   26 | main(){
      | ^~~~
sirni.cpp: In function 'int main()':
sirni.cpp:45:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     for(int i = 1; i < v.size(); 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...