[PYTHON] ABC164

Ich habe am AtCorder Beginner Contest 164 teilgenommen. Es waren ABCs 3 Fragen AC. Ich benutze Python.

Ein Problem

Wenn der Wolf W Schaf S oder höher ist, werden die Schafe vom Wolf angegriffen, so dass es unsicher ist.

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

B Problem

Sei nicht die Anzahl der Umdrehungen, die Takahashi benötigt, um 0 körperliche Stärke zu haben, und a die Anzahl der Umdrehungen, die Aoki benötigt, um 0 körperliche Stärke zu haben. Takahashi gewinnt, wenn Aokis körperliche Stärke zuerst 0 wird, also ist t größer als a. Selbst wenn es dieselbe Runde dauert, bis 0 körperliche Stärke erreicht ist, gewinnt Takahashi zuerst.

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")

C Problem

Speichern Sie die erhaltenen Preise in Liste S. Erstellen Sie eine Liste ohne Duplikate und ermitteln Sie die Anzahl der Elemente.

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

D Problem

Finden Sie alle Vielfachen von 2019 zwischen 1 und 200.000 und setzen Sie sie in die Liste baisuu. Wir werden in der Reihenfolge suchen, als ob es 2019 → 4038 enthält. Wenn jedoch am Anfang und am Ende dieselbe Nummer enthalten ist, z. B. 18171 (= 2019 * 9), konnte nicht bestätigt werden, dass 181718171 zwei 18171 enthält.

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)]

Ein Vielfaches von 2019 bedeutet, dass der Rest geteilt durch 2019 0 ist. Anstatt beide zu verschieben, wenn der Bereich angegeben wird, kann der Rechenaufwand reduziert werden, indem er am rechten Ende fixiert wird.

Betrachten Sie als gutes Beispiel, ob S = 12114 bis 2019 teilbar ist. Finden Sie den Rest, während Sie die rechte Kante fixieren und die linke Kante nacheinander verschieben. 1 → 1 41 → 41 141 → 141 1141 → 1141 21141 → 951 121141 → 1 Die Reste stimmen überein, wenn sie 1-stellig und 6-stellig sind. Dies zeigt an, dass die Anzahl der Ziffern 6 bis 2 (1 + 1) ein Vielfaches von 2119 ist.

a = 2019 * A + y b = 2019 * B + y a - b = 2019 * (A * B) a - b ist 10 nach der n-ten Potenz. Da 10 und 2019 zueinander prim sind, ist a - b ein Vielfaches von 2019.

Daher ist es durch Berechnung aller Reste und Zählen der Anzahl der Duplikate möglich, eine Zahl zu erhalten, die ein Vielfaches von 2019 ist. Wenn Sie durch 2019 teilen und der Rest 0 wird, ist dies auch dann der Fall, wenn 2019 keine Duplizierung vorliegt. Die Antwort unten ist 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 Impressionen
AtCoder ABC176
ABC167 WriteUp
AtCoder ABC177
Anfänger ABC154 (Python)
Anfänger ABC156 (Python)
abc154 teilnahmebericht
abc155 teilnahmebericht
AtCoder ABC 174 Python
Anfänger ABC155 (Python)
Anfänger ABC157 (Python)
AtCoder ABC 175 Python
Rückblick auf ABC155
Atcoder ABC115 Vergangene Frage Übung
Löse ABC169 mit Python
ABC147 C --HonestOrUnkind2 [Python]