Submission #1275154

#TimeUsernameProblemLanguageResultExecution timeMemory
1275154vk3601hSirni (COCI17_sirni)C++20
0 / 140
455 ms5468 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <cmath>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> p(n);
    for (int i = 0; i < n; i++) {
        cin >> p[i];
    }
    
    sort(p.begin(), p.end());
    
    set<int> visited;
    visited.insert(p[0]);
    long long total = 0;
    
    for (int i = 1; i < n; i++) {
        int x = p[i];
        int min_weight = x;
        
        // 检查是否有约数
        bool has_divisor = false;
        for (int d = 1; d * d <= x; d++) {
            if (x % d == 0) {
                if (visited.count(d)) {
                    has_divisor = true;
                    break;
                }
                if (d != 1 && visited.count(x / d)) {
                    has_divisor = true;
                    break;
                }
            }
        }
        
        if (has_divisor) {
            visited.insert(x);
            continue;
        }
        
        // 找小于x的最大数
        auto it = visited.lower_bound(x);
        if (it != visited.begin()) {
            --it;
            int candidate = *it;
            min_weight = min(min_weight, x % candidate);
        }
        
        // 找最大的p ≤ x/2
        it = visited.upper_bound(x / 2);
        if (it != visited.begin()) {
            --it;
            int candidate = *it;
            min_weight = min(min_weight, x % candidate);
        }
        
        total += min_weight;
        visited.insert(x);
    }
    
    cout << total << endl;
    return 0;
}
#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...