답안 #715974

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
715974 2023-03-28T16:21:52 Z ismayil Sirni (COCI17_sirni) C++17
98 / 140
1494 ms 786432 KB
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAX = 1e7;
int parent[MAX + 1];
int _find(int i){
    if(parent[i] < 0) return i;
    return parent[i] = _find(parent[i]);
}
bool _union(int u, int v){
    u = _find(u), v = _find(v);
    if(u == v) return false;
    if(parent[u] > parent[v]) swap(u, v);
    parent[u] += parent[v];
    parent[v] = u;
    return true;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n;
    cin>>n;
    vector<int> P(n);
    for(auto& i : P) cin>>i;
    sort(P.begin(), P.end());
    int _max = P[n - 1];
    int _next[MAX + 5] = {0};

    for(auto i : P) _next[i] = i;
    for (int i = _max; i >= 0; i--)
    {
        if(_next[i] != 0) continue;
        _next[i] = _next[i + 1];
    }

    vector<pair<int, int>> edges[_max + 1];
    for(int i = 0; i < n; i++){
        if(i != 0 && P[i - 1] == P[i]) continue;
        int a = P[i];
        if(a == _max) continue;
        for (int j = a; j <= _max; j += a)
        {
            int b;
            if(j == P[i]) b = _next[j + 1];
            else b = _next[j];
            if(j / a == b / a) edges[b % a].push_back({a, b});
        }
        
    } 
    memset(parent, -1, sizeof(parent));
    int ans = 0;
    for(int i = 0; i <= (_max / 2); i++){
        for(auto& j : edges[i]){
            if(_union(j.first, j.second)) ans += i;
        }
    }
    cout<<ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 228 ms 391684 KB Output is correct
2 Correct 288 ms 395524 KB Output is correct
3 Correct 228 ms 390984 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 65 ms 157276 KB Output is correct
2 Correct 925 ms 392816 KB Output is correct
3 Correct 222 ms 391884 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 224 ms 391792 KB Output is correct
2 Correct 225 ms 391224 KB Output is correct
3 Correct 220 ms 391892 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 143 ms 199580 KB Output is correct
2 Correct 262 ms 253212 KB Output is correct
3 Correct 165 ms 210316 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 89 ms 183444 KB Output is correct
2 Correct 188 ms 223544 KB Output is correct
3 Correct 127 ms 188184 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 196 ms 222348 KB Output is correct
2 Correct 311 ms 275348 KB Output is correct
3 Correct 163 ms 207004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 168244 KB Output is correct
2 Correct 304 ms 271932 KB Output is correct
3 Correct 160 ms 206520 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 414528 KB Output is correct
2 Runtime error 1272 ms 786432 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 325 ms 415436 KB Output is correct
2 Runtime error 1494 ms 786432 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 245 ms 396140 KB Output is correct
2 Runtime error 1333 ms 786432 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -