白駿18111号:私の世界


質問する


題ショートカットキー>白駿18111号:私の世界

に答える


問題が読めなかったので,しばらく間違えてやっと正解した.ただすべての場合、最小時間条件を満たす前提で、正確な答えを設定し、地の高さを最高にします.地の高さは0から256とすることができるので、0から256の間で繰り返し行う過程で、以下の2つの条件(tmp<=time && btmp<=b)を満たせば、正解を更新することができる.tmp<=timeでは、小さい場合ではなく、同じまたは小さい場合であり、最小時間条件下では、土地の最大高さを保証することができる.
# include <iostream>
# include <cstdlib>
using namespace std;

int main(){
    int n, m, b; cin>>n>>m>>b;
    int h[n][m] = {};
    int num[257] = {};
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++) {
            cin>>h[i][j];
            num[h[i][j]]++;
        }
    }
    int time=2100000000, height=0;
    for(int i=0; i<257; i++){
        int tmp=0, btmp=0;
        for(int j=0; j<n; j++){
            for(int k=0; k<m; k++){
                if(i<h[j][k]) {
                    tmp+=(h[j][k]-i)*2;
                    btmp-=(h[j][k]-i);
                }
                else if(i>h[j][k]){
                    tmp+=(i-h[j][k]);
                    btmp+=(i-h[j][k]);
                }
            }
        }
        if(tmp<=time && btmp<=b){
            time = tmp;
            height = i;
        }
    }
    cout << time << ' ' << height;
}