Dernière fois Aujourd'hui, nous allons remplir le camp d'entraînement pour les débutants pour les problèmes de codeur. Le niveau de difficulté est moyen.
#33 AGC029-A 1TLE
** Pensées ** difficile. B et W sont commutés lorsque l'opération est effectuée. Finalement, W sera à gauche et B sera à droite. Pour que $ W_i (1 \ leq i \ leq N) $ aille vers la gauche, vous devez opérer sur tous les Bs à gauche de ce W. Donc, si vous ajoutez le nombre de B à gauche de $ W_i (1 \ leq i \ leq N) $, la réponse est correcte.
s = list(input())
ans = 0
count_b = 0
n = len(s)
for i in range(n):
if s[i] == 'B':
count_b += 1
if s[i] == 'W':
ans += count_b
print(ans)
ABC139-D 1WA
** Pensées ** C'est un problème avec le reste. Trouvez la valeur maximale du reste total lorsque $ i (1 \ leq i \ leq N $ est divisé par $ P_i $) pour la séquence de nombres $ P $ dans laquelle les entiers jusqu'à $ N $ sont réorganisés. $ Pense que les nombres entiers jusqu'à $ N $ sont classés par ordre croissant. Si vous continuez l'opération, le total du reste sera égal à 0. Si vous décalez $ P $ de un vers la droite, ce sera $ N-1 $. En effet, $ P_i $ est 1 de moins que $ i $, ce qui signifie que lorsque vous le déplacez vers la gauche, la somme des restes est maximisée, car lorsque vous le déplacez vers la gauche, $ est plus petit que $ i $. P_i $ est augmenté de 1. Alors $ i % P_i = i $. Notez que le reste est 0 seulement à $ P_i = 1 $, la somme des restes est $ \ frac {N (N) -1)} {2} $. Une preuve détaillée peut être trouvée dans l'explication.
n = int(input())
print(n*(n-1)//2)
Je m'inquiète pour l'ABC de demain car je n'ai pas été dévoué récemment. A bientôt, bonne nuit.
Recommended Posts