[PYTHON] ABC164

J'ai participé au concours pour débutants AtCorder 164. C'était les 3 questions AC d'ABC. J'utilise Python.

Un problème

Lorsque le loup W est plus que le mouton S, le mouton sera attaqué par le loup, il est donc dangereux.

S, W = map(int,input().split()
if S <= W:
    print("unsafe")
else:
    print("safe")

Problème B

Soit t le nombre de tours requis pour que Takahashi ait 0 force physique, et a le nombre de tours requis pour qu'Aoki ait 0 force physique. Takahashi gagne lorsque la force physique d'Aoki devient d'abord 0, donc t est supérieur à a. Même si cela prend le même tour pour atteindre 0 force physique, Takahashi gagnera en premier.

A, B, C, D = map(int,input().split())
import math
t = math.ceil(A / D)
a = math.ceil(C / B)
if t >= a:
    print("Yes")
else:
    print("No")

Problème C

Stockez les prix obtenus dans la liste S. Créez une liste sans doublons et trouvez le nombre d'éléments.

N = int(input())
S =[input() for i in range(N)]
import collections
c = collections.Counter(S)
print(len(c))

Problème D

Retrouvez tous les multiples de 2019 compris entre 1 et 200000 et mettez-les dans la liste baisuu. Nous chercherons dans l'ordre comme s'il contenait 2019 → 4038. Cependant, si le même nombre est inclus au début et à la fin, tel que 18171 (= 2019 * 9), il n'a pas été possible de confirmer que 181718171 contient deux 18171.

S = input()
import re
baisuu = [2019 * i for i in range(200000 // 2019)]
count = [len(re.findall(str(i), str(S)))
         for i in baisuu if str(i) in str(S)]

Un multiple de 2019 signifie que le reste divisé par 2019 est égal à 0. Plutôt que de déplacer les deux lors de la spécification de la plage, la quantité de calcul peut être réduite en la fixant à l'extrémité droite.

À titre d'exemple, considérez si S = 12114 est divisible par 2019. Trouvez le reste en fixant le bord droit et en décalant le bord gauche un par un. 1 → 1 41 → 41 141 → 141 1141 → 1141 21141 → 951 121141 → 1 Les restes correspondent lorsqu'ils sont à 1 chiffre et lorsqu'ils sont à 6 chiffres. Cela indique que le nombre de chiffres 6 à 2 (1 + 1) est un multiple de 2119.

a = 2019 * A + y b = 2019 * B + y a - b = 2019 * (A * B) a --b vaut 10 à la nième puissance. Parce que 10 et 2019 sont premiers l'un par rapport à l'autre, a --b est un multiple de 2019.

Par conséquent, en calculant tous les restes et en comptant le nombre de doublons, il est possible d'obtenir un nombre multiple de 2019. De plus, s'il est divisé par 2019 et devient un reste de 0, ce sera le cas de 2019 même s'il n'y a pas de duplication. La réponse ci-dessous est TLE.

S = list(input())
S.reverse()
amari = []
A = 0
c = 0
for i in range(len(S)):
    a = (int(A) + int(S[i]) *(10 ** i)) % 2019
    amari.append(a)
    if a == 0:
        c += 1
    A = a
print(c + len(amari) - len(set(amari)))

Recommended Posts

ABC164
ABC174
ABC175
ABC170
ABC182
ABC153
ABC146 Impressions
AtCoder ABC176
ABC167 WriteUp
AtCoder ABC177
Débutant ABC154 (Python)
Débutant ABC156 (Python)
rapport de participation abc154
rapport de participation abc155
AtCoder ABC 174 Python
Débutant ABC155 (Python)
Débutant ABC157 (Python)
AtCoder ABC 175 Python
Retour sur ABC155
Atcoder ABC115 Exercice de questions passées
Résolvez ABC169 avec Python
ABC147 C --HonestOrUnkind2 [Python]