AtCoder ABC174 Ceci est un résumé des problèmes du concours AtCoder Beginner Contest 174, qui s'est tenu le 2020-08-02 (dimanche), dans l'ordre du problème A, en tenant compte de la considération. La seconde partie traite du problème de l'ED. Cliquez ici pour la première moitié Le problème est cité, mais veuillez consulter la page du concours pour plus de détails. Cliquez ici pour la page du concours Commentaire officiel PDF
Énoncé du problème L'autel est enchâssé de pierres $ N $ alignées de gauche à droite. La couleur de la pierre $ i $ th $ (1 \ leqq i \ leqq N) $ à partir de la gauche est donnée par la lettre $ c_i $, qui est rouge quand $ c_i $ est "R" et blanche quand elle est "W". Vous pouvez effectuer les deux opérations suivantes autant de fois que vous le souhaitez dans n'importe quel ordre. ・ Sélectionnez des pierres de 2 $ (pas nécessairement les unes à côté des autres) et remplacez-les. ・ Sélectionnez des pierres à 1 $ et changez la couleur des pierres (rouge pour blanc, blanc pour rouge). Selon la diseuse de bonne aventure, la pierre blanche placée à gauche de la pierre rouge provoque le désastre. Combien d'opérations sont nécessaires pour atteindre l'état sans ces pierres blanches?
Quand j'ai lu le problème, j'ai pensé que je pourrais le résoudre simplement en "sélectionnant des pierres de $ 2 $ (pas nécessairement les unes à côté des autres) et en les remplaçant." En n'utilisant pas "・ Sélectionnez des pierres $ 1 $ et changez la couleur des pierres (rouge pour blanc, blanc pour rouge)", l'état sans la réponse finale est fixé. Par exemple, à $ N = 9 $ 'WRWWWRRWR' L'entrée est 'RRRRWWWWW' La réponse peut être donnée en considérant le fonctionnement minimum de sorte que. C'est le nombre de pierres rouges incluses dans l'entrée $ N_r $, et le nombre de pierres blanches de $ 1 $ à $ N_r $ th dans l'entrée est le nombre d'opérations requis. (Dans le cas de l'exemple, $ 3 $ est la réponse car c'est le nombre de pierres blanches dans le $ 1 $ à $ 4 $ th'WRWW'de'WRWWWRRWR '.)
abc174d.py
n = int(input())
mozi = input()
a_list = []
for i in range(n):
if mozi[i] == 'W':
a_list.append(0)
else:
a_list.append(1)
r_count = sum(a_list)
print(r_count - sum(a_list[0:r_count]))
Énoncé du problème Il existe des logs $ N $, chacun étant $ A_1, A_2, ⋯, A_N $. Vous pouvez couper ces journaux jusqu'à un total de $ K $ fois. Si vous coupez un journal de longueur $ L $ d'une extrémité à la position $ t (0 <t <L) $, il sera divisé en journaux de longueur $ t, L − t $. Après avoir coupé le journal jusqu'à un total de $ K $, trouvez la longueur minimale du journal le plus long et sortez la valeur arrondie au nombre entier le plus proche.
Je n'ai pas remarqué la dichotomie et recherchais avidement à partir de $ x = 1 $, donc je n'ai pas pu le résoudre pendant le concours.
abc175e.py
n, k = map(int, input().split())
a_list = list(map(int, input().split()))
a_list.sort(reverse=True)
if k == 0:
print(a_list[0])
else:
start = 1
end = a_list[0]
x = (start + end) // 2
while True:
k_count = 0
flag = 1
for a in a_list:
temp_k = 0
if a % x == 0:
temp_k = a // x - 1
else:
temp_k = a // x
if temp_k == 0:
flag = 1
break
k_count += temp_k
if k_count > k:
flag = 0
break
if flag == 1:
end = x
if flag == 0:
start = x
next_x = (start + end) // 2
if next_x == x:
if flag == 1:
print(x)
if flag == 0:
print(x + 1)
break
x = next_x
Merci d'avoir lu la seconde moitié jusqu'à la fin.
Recommended Posts