Educational Codeforces Round 112-A. PizzaForces

falconlee236

·

2021. 12. 25. 14:19

반응형

문제 설명

Pizzaforces는 페니가 가장 좋아하는 피자가게이다. 이 가게에는 3종류의 피자를 만들고 판매한다. S 사이즈는 6조각, M사이즈는 8조각, L사이즈는 10조각으로 이루어져 있다. 각각 피자를 만드는데 15분, 20분, 25분이 걸린다.

페니의 생일은 바로 오늘이고 친구 $n$명이 오기로 되어있다. 그래서 페나가 가장 좋아하는 피자집인 Pizzaforces에서 피자를 주문하려 한다. 페니는 모든 친구들이 최소 피자 1조각을 먹게 주문하고 싶다. 총 주문 시간은 모든 피자를 요리하는데 필요한 총 시간이다.

우리는 최소 $n$조각의 피자를 만들기 위해서 필요한 최소 시간을 구해야 한다.

Input
첫번째 줄에는 테스트 케이스를 의미하는 정수 $t (1 \le t \le 10^4)$ 이 주어진다.

각 테스트 케이스의 첫번째 줄에는 페니의 친구수를 나타내는 정수 $n (1\le n \le 10^{16})$ 이 주어진다.

Output
각 테스트케이스마다 최소 $n$개의 피자조각을 만들기 위해서 필요한 최소 시간을 출력한다.

Example
input
6
12
15
300
1
9999999999999999
3

output
30
40
750
15
25000000000000000
15

문제 접근

사용한 알고리즘: 수학
걸린 시간 : 00:04
ㅋㅋㅋㅋㅋㅋㅋ A번 문제에 *900이 나오면 푸는 시간이 왜이렇게 오래걸릴까? 변명말고 풀이 시작하자.

문제에 제시된 시간과 조각사이의 비례 관계를 보면 6 : 15 = 8 : 20 = 10 : 25 = 2 : 5이므로 만드는 순서는 상관이 없다! 또한 6이상의 피자조각은 반드시 저 조합으로 만들 수 있기 때문에 6보다 작은경우, 홀수인 경우만 따로 처리해주면 된다.

비례식에 따르면 2조각을 만드는데 5분이 걸리므로, 6이상인 짝수가 나오면 그냥 2.5를 곱하면 된다. 만약 홀수가 나오면 주어진 조각보다 하나 더 많은 값을 만들어야 하기 때문에 $n + 1$을 한 값을 2로 나누고, 5를 곱하면 답이나온다. 만약 피자조각이 7개이면 우리는 8조각을 만들면 되므로 2개 조각짜리 피자를 $(7 + 1) / 2$개 만들어야 한다. 6보다 작은 피자를 만들려면 그냥 6개를 무조건 만들어야 하기 때문에 그냥 15를 출력하면 된다.

정답 코드

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int t; cin >> t;
    while(t--){
        long long n; cin >> n;
        cout << (max(6LL, n) + 1) / 2 * 5 << "\n";
    }
    return 0;
}
반응형