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;
}
'알고리즘 > codeforces' 카테고리의 다른 글
Educational Codeforces Round 112-C. Coin Rows (0) | 2021.12.25 |
---|---|
Educational Codeforces Round 112-B. Two Tables (0) | 2021.12.25 |
Codeforces Round #736 (Div. 2)-C. Web of Lies (0) | 2021.12.20 |
Codeforces Round #736 (Div. 2)-B. Gregor and the Pawn Game (0) | 2021.12.20 |
Codeforces Round #736 (Div. 2)-A. Gregor and Cryptography (0) | 2021.12.20 |