https://www.acmicpc.net/problem/21760
[난이도] Bronze1
[유형] 수학
[풀이]
N,M,k,D가 모두 주어지고 A=k*B 이기 때문에 식을 잘 세워보면
미지수는 B밖에 남지 않는 다는 것을 알 수 있습니다.
식을 잘 정리한 뒤 반복문을 이용해 B가 조건을 만족하지 않을 때까지 증가시켜가며 B의 최적값을 찾아주면 됩니다.
#include <algorithm>
using namespace std;
using ll = long long;
int T;
ll N,M,k,D;
int main(){
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld%lld",&N,&M,&k,&D);
ll B=0;
while(N*M*B*(k*(M-1)+M*(N-1))<=2*D) B++;
if(B<=1) {
puts("-1");
continue;
}
ll a=N*M*(B-1)*(k*(M-1)+M*(N-1));
printf("%lld\n",a/2);
}
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Bronze1/21760.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Bronze2] 22341 : 사각형 면적 (C++) (0) | 2022.07.05 |
---|---|
[BOJ/백준][Gold1] 21761 : 초직사각형 (C++) (0) | 2022.07.05 |
[BOJ/백준][Silver1] 21758 : 꿀 따기 (C++) (0) | 2022.07.04 |
[BOJ/백준][Gold3] 21757 : 나누기 (C++) (0) | 2022.07.04 |
[BOJ/백준][Bronze2] 21756 : 지우개 (C++) (0) | 2022.07.04 |