1 条题解

  • 0
    @ 2026-9-30 12:54:56

    C++ :

    
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    static long long h[160005];
    int main(){
        int M, N; long long V;
        if(scanf("%d %d %lld", &M, &N, &V) != 3) return 0;
        int T = M * N;
        for(int i=0;i<T;i++) scanf("%lld", &h[i]);
        sort(h, h + T);
        long long level = h[0], used = 0;
        for(int i=1;i<T;i++){
            long long need = (h[i] - level) * i;
            if(used + need <= V){ used += need; level = h[i]; }
            else {
                long long up = (V - used) / i;
                level += up;
                used += up * i;
                break;
            }
        }
        if(used < V){
            long long up = (V - used) / T;
            level += up;
        }
        /* 水下陆地的量 = 被淹没格子(h_i <= level)的高度之和 */
        long long land = 0;
        for(int i=0;i<T;i++) if(h[i] <= level) land += h[i];
        printf("%lld %lld\n", level, land);
        return 0;
    }
    
    
    • 1

    信息

    ID
    2796
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者