728x90
반응형
https://www.acmicpc.net/problem/18111
18111번: 마인크래프트
팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게
www.acmicpc.net
주의할점은 인벤토리 b가 중간에 마이너스가 되든 상관없다는것이다. 그건 순서의 문제니까 최종이 음수가 안되기만 되면 되는것!!
#include <iostream>
#include<vector>
#include<map>
using namespace std;
vector<vector<int>>arr;
vector<int>info;
int n,m,b;
long long cal(int num,int b){
long long cnt=0;
for(int i=0;i<info.size();i++){
if(i>num){
cnt+=(i-num)*2*info[i];
b+=info[i]*(i-num);
}
if(i<num){
cnt+=(num-i)*info[i];
b-=info[i]*(num-i);
}
// if(b<0)return -1; 왜안되는데?
}
if(b<0)return -1;
return cnt;
}
int main()
{
int cnt=0;
//제거 2초 올려놓기 1초
info.assign(257,0);
cin>>n>>m>>b;
arr.assign(n,vector<int>(m,0));
int mins=10000000;
int maxs=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>arr[i][j];
mins=min(mins,arr[i][j]);
maxs=max(maxs,arr[i][j]);
info[arr[i][j]]++;
}
}
//제거*2 올리기 +1
if(mins==maxs){ //처음부터 고른경우
cout<<0<<' '<<mins;
return 0;
}
int h=0;
long long ans=100000000000;
for(int i=mins;i<=maxs;i++){
long long t=cal(i,b); //i높이에서 걸리는 시간
if(t>0){ //b가 양수일때만
if(ans>t){
ans=t;
h=i;
}
else if(ans==t){
if(i>h){
h=i; //시간이 같으면 더 높은 위치
}
}
}
}
cout<<ans<<' '<<h;
return 0;
}
728x90
반응형
'하루 1문제 챌린지 > Silver2' 카테고리의 다른 글
백준 12891번 DNA 비밀번호(C++) (0) | 2024.03.02 |
---|---|
백준 10971번 외판원순회2 (C++) 🚩 (0) | 2024.03.01 |
백준 3085 사탕게임 C++ (0) | 2024.01.31 |