https://www.acmicpc.net/problem/18111
18111번: 마인크래프트
팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게
www.acmicpc.net
확실히 무슨 카테고리인지 알고 푸냐 아니냐에 따라 문제의 난이도가 매우 다른것 같다.
범위가 무척 큰 것 같아 이분 탐색으로 푸려 했는데, 알고보니 브루트 포스 문제여서 그냥 구현만 하면 되는 문제.
#include <cstdio>
#include <algorithm>
using namespace std;
int main(void){
long long int N, M, B, Block[501][501], mini=64000001, maxi=-1;
scanf("%lld %lld %lld",&N,&M,&B);
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
scanf("%lld", &Block[i][j]);
mini = min(Block[i][j], mini);
maxi = max(Block[i][j], maxi);
}
}
long long int time, left=mini, right=maxi, save, ans1=99999999999, ans2;
for(int i=left; i<=right; i++){
time = 0;
save = B;
for(int j=0; j<N; j++){
for(int k=0; k<M; k++){
if(Block[j][k]>=i){
time += 2*(Block[j][k]-i);
save += (Block[j][k]-i);
}
else{
time += (i - Block[j][k]);
save -= (i - Block[j][k]);
}
}
}
if(save >= 0){
if(ans1>=time){
ans1 = time;
ans2 = i;
}
}
}
printf("%d %d", ans1, ans2);
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 15829번] Hashing (Bronze 2) (0) | 2020.08.20 |
---|---|
[C/C++ 백준 10814번] 나이순 정렬 (Silver 5) (0) | 2020.08.20 |
[C/C++ 백준 9012번] 괄호 (Silver 4) (0) | 2020.08.20 |
[C/C++ 백준 10828번] 스택 (Silver 4) (0) | 2020.08.20 |
[C/C++ 백준 10845번] 큐 (Silver 4) (0) | 2020.08.20 |