Link https://www.acmicpc.net/problem/13458
소스결과 5888 KB / 12 ms
출처 Baekjoon
언어 C++ 17
분류 그리디 알고리즘, 수학
설명
총 감독관이 a명을 감시하고 부 감독관이 b 명을 감시할 때 모든 시험장에서 필요한 감독관의 수를 구하여라.
알고리즘 자체는 쉽다. 각 시험장에는 총 감독관 1명만이 필수로 배치 되어야하고, 나머지 인원을 감시하기 위해서 부 감독관이 배치가 된다.
각 시험장에 총 감독관을 배치 후에 남은 인원 수를 부 감독관이 감시 할 수 있는 수로 나눈 후, 나머지가 존재 한 다면 추가로 한명을 더 배치하면 된다.
다만, 결과 값이 정수 범위를 넘어갈 수 있다. ( b 와 c가 1이고, n = Ai = 1,000,000 인 경우 10 ^ 16 , int 는 2 * 10 ^ 10 까지 )
범위 설정에 유의하자
알고리즘
1. 시험장 개수, 응시자 수, b, c를 입력 받는다.
2. 각 시험장의 응시자 수 에 대해서 b를 뺀 후 결과값을 1 늘린다.
3. b 를 뺸 응시자 수가 0보다 큰 경우, c로 나눈 몫 만큼을 결과 값에 더하고 나머지가 존재하면 추가적으로 1 더 더한다.
소스코드
#include <iostream>
using namespace std;
const int MAX = 1000000;
int applicant[MAX];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int tcc, admin, submin;
long long res = 0;
cin >> tcc;
for (int i = 0; i < tcc; i++)
cin >> applicant[i];
cin >> admin >> submin;
for (int i = 0; i < tcc; i++)
{
applicant[i] -= admin;
res++;
if (applicant[i] <= 0)
continue;
res += applicant[i] / submin;
res = res + (applicant[i] % submin ? 1 : 0);
}
cout << res;
return 0;
}
'Algorithm > Mathematics' 카테고리의 다른 글
Baekjoon 1037 약수 (0) | 2019.03.31 |
---|---|
Baekjoon 16563 어려운 소인수분해 (0) | 2019.03.31 |
BaekJoon 1356 유진수 (0) | 2019.01.29 |
BaekJoon 1074 Z (0) | 2019.01.29 |
BaekJoon 1076 저항 (0) | 2019.01.21 |