728x90
반응형
https://www.acmicpc.net/problem/30677
30677번: 반짝반짝 빛나는 별가루
첫째 줄에는 $N,K,C,R$ 이 공백을 사이에 두고 주어진다. $(1 \leq K \leq N \leq 100 \, 000;$ $1 \leq C \leq 100;$ $1 \leq R \leq 100)$ 둘째 줄에는 $base_1, \cdots , base_K$가 공백을 사이에 두고 주어진다. $(1 \leq base_i \le
www.acmicpc.net
문제해결
- 쉬운 문제인줄 알았는데 계속 오류가나서 많이 해매었던 문제
- 원인은 정밀도에 있었다고 한다.
- $combo*C$나 $skill_{i} s_{i}$같은 경우 소수점 계산에서 오류가 날 수 있다고 한다.
- 따라서 각각 100을 곱해준 다음 나중에 버림할 때 한번에 10000을 나눠서 몫을 계산하는게 좋다고한다.
- 이를 유의해서 다음부터 히든테스크를 잘 피해나가야겠다.
CODE
import sys
input = sys.stdin.readline
def calculate(i):
result = (base[i]*(100+combo*c)*(100+skill[i]*s[i]))//10000
skill[i] += 1
return result
if __name__=='__main__':
n, k, c, r= map(int, input().split())
base = [0] + list(map(int, input().split()))
s = [0]+list(map(int, input().split()))
p = [0]+ list(map(int, input().split()))
answer = 0
combo = 0 # 연속으로 사용한 마법 횟수
skill = [0 for _ in range(k+1)]
tired = 0 # 초기 피로도
broke = False
for _ in range(1,n+1):
l = int(input())
if l==0:
tired = max(0, tired-r)
combo = 0
else:
delta = calculate(l)
combo += 1
answer += delta
tired += p[l]
if tired>100:
print(-1)
exit()
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 1750 서로소의 개수 (0) | 2024.02.22 |
---|---|
[python] 백준 1064 평행사변형 (1) | 2024.02.21 |
[python] 백준 23258 밤편지 (0) | 2024.02.18 |
[python] 백준 2628 종이자르기 (0) | 2024.02.16 |
[python] 백준 2527 직사각형 (0) | 2024.02.15 |
댓글