개인 노트

감상


a1 완성
arc118_score

A - Tax Included Price


\frac{100+t}{100}A=A+\racc{At}에서 알 수 있듯이 At는 100의 배수를 통과할 때 나타나지 않는 금액이 존재한다.
따라서 N번째 금액은\rac{At}이 1이 되면 A에서 1을 뺀 금액이다.
t, N = map(int, input().split())

A = -(-100 * N // t)  # 切り上げの割り算
ans = (100 + t) * A // 100 - 1
print(ans)

B - Village of M People


고찰은 옳았지만 실복에 오류가 있었다.
B_i=\lflowor\rac{A iM} {N}\rflowor로 가정합니다.
B_만약 i가 마이너스 정수가 아니라면, 소수일 수도 있습니다.sum^K{i=1}B_i=M 충족 시 maxi|\rac{B i} {M]-\rac{A i} B를 최소화하기 위해i=\rac{A iM} {N} 이면 됩니다.
이것을 좋은 느낌으로 하고 소수점 이하를 버리는 것이 좋다.
즉, 최초의 모든 Bi를 제거하여 컴퓨팅, fracc {B i} {M] -\racc {A i} {N} 어릴 때부터 M-\sum^K{i=1}B_i 개 Bi에 1만 더하면 돼.
\frac{B i} {M]-\fracc{A i} 의 계산에 오류가 발생할 수 있으므로 Decimal을 사용했습니다.
score 관리가 사전으로 이루어지면, tmp스코어가 중복되는 상황을 고려하지 않았기 때문에 고장이 났을 수도 있다.
from decimal import Decimal

K, N, M = map(int, input().split())
A = list(map(int, input().split()))

ans = []
scores_and_i = []
for i in range(K):
    ans.append(A[i] * M // N)
    tmp_score = Decimal(ans[-1]) / Decimal(M) - Decimal(A[i]) / Decimal(N)
    scores_and_i.append((tmp_score, i))

scores_and_i.sort()

diff = M - sum(ans)
for _, i in scores_and_i[:diff]:
    ans[i] += 1

print(*ans)

C - Coprime Set


N=3시의 해는 3개의 수 2, 3, 5 중 2개를 곱한 후의 수(6, 15, 10)다.
이 몇 열은 문제문의 모든 조건을 만족시켰다.
나는 이 몇 열에 조건을 만족시키는 수량을 늘리고 싶다.
조건을 충족시키는 수는 3개의 수 중 2개 이상의 수를 약수로 하고 곧(6,15,10) 중 하나를 약수로 한다.
이 수량은 1 이상 10^4 이하는 2665개로 해결 방안을 얻을 수 있다.
arc118c_fig
N = int(input())

a, b, c = 2, 3, 5
base_nums = [a * b, b * c, c * a]

now_num = max(base_nums) + 1
ans = list(base_nums)
while len(ans) < N:
    if any(now_num % x == 0 for x in base_nums):
        ans.append(now_num)
    now_num += 1

print(*ans)

좋은 웹페이지 즐겨찾기