第四题没那么复杂
#include <bits/stdc++.h>

int main(int argc, const char* argv[]) {
    std::ios::sync_with_stdio(false);

    size_t N, K;
    std::cin >> N >> K;
    std::vector<size_t> val(N);
    for(size_t i = 0; i < N; i++) {
        std::cin >> val[i];
    }
    std::sort(val.begin(), val.end());
    size_t idx = 0;
    size_t previous = 0;
    for(size_t i = 0; i < K; i++) {
        if(idx == N) {
            std::cout << "0\n";
            continue;
        }
        std::cout << val[idx] - previous << std::endl;
        previous = val[idx];
        for(; idx < N; idx++) {
            if(val[idx] != previous) {
                break;
            }
        }
    }

    return EXIT_SUCCESS;
}
第三题举反例,最大数远大于其他数,然后最佳解应该是【最大数+较小的一半数】/【除了最大外的较大的一半数】