[PYTHON] AtCoderBeginnerContest170 Review & Summary (erste Hälfte)

AtCoder ABC170 Dies ist eine Zusammenfassung der Probleme des AtCoder Beginner Contest 170, der am 14.06.2020 (So) in der Reihenfolge von Problem A unter Berücksichtigung der Berücksichtigung stattfand. Das erste Halbjahr befasst sich mit Fragen bis zu ABCD. Das Problem wird zitiert, aber bitte überprüfen Sie die Wettbewerbsseite für Details. Klicken Sie hier für die Wettbewerbsseite Offizieller Kommentar PDF

Problem A Fünf Variablen

Problemstellung $ 5 $ Es gibt zwei Variablen $ x_1, x_2, x_3, x_4, x_5 $. Der Variablen $ x_i $ wurde zunächst die Ganzzahl $ i $ zugewiesen. Sunuke-kun hat aus diesen Variablen $ 1 $ ausgewählt und dieser Variablen $ 0 $ zugewiesen. Sie erhalten den Wert von $ 5 $ Variablen, nachdem Sunuke-kun dies getan hat. Bitte antworten Sie, welcher Variablen Sunuke-kun $ 0 $ zugewiesen hat.

Zur Übermittlung wurde die for-Anweisung so gedreht, dass der Teil mit 0 Elementen ausgegeben wurde. Die meisten Programmiersprachen beginnen mit $ 0 $ im Array. Wenn Sie also darauf achten, sollten Sie sich keine Sorgen um WA machen müssen.

abc170a.py


x = list(map(int, input().split()))
for i in range(5):
    if x[i] == 0:
        print(i + 1)

Nachdem ich mir die Erklärung nach dem Abschluss angesehen hatte, dachte ich, dass die Antwort $ 15 - x_1 - x_2 - x_3 - x_4 - x_5 $ sein würde.

Problem B Kran und Schildkröte

Problemstellung Es gibt einige Tiere im Garten. Dies sind entweder Kräne mit $ 2 $ Beinen oder Schildkröten mit $ 4 $ Beinen. Takahashi sagt: "Die Gesamtzahl der Tiere im Garten beträgt $ X $, und die Gesamtzahl ihrer Beine beträgt $ Y $." Stellen Sie fest, ob es eine Kombination aus Kran- und Schildkrötennummern gibt, die diese Aussage korrekt macht.

Ich habe die Regeln mit if-Anweisungen in der Reihenfolge hinzugefügt, in der ich dachte.

  1. Wenn die Gesamtzahl der Beine $ Y $ größer ist als die Anzahl der Beine, wenn alle Schildkröten verwendet werden, "Nein".
  2. "Nein", wenn die Gesamtzahl der Beine $ Y $ kleiner ist als die Anzahl der Beine, wenn alle zu Kränen verarbeitet sind
  3. Die Gesamtzahl der Beine kann nicht ungerade sein. Wenn also die Gesamtzahl der Beine $ Y $ ungerade ist, wird "Nein" angezeigt.

abc170b.py


x, y = map(int, input().split())
if y < 2 * x or x * 4 < y:
    print("No")
else:
    if y % 2 == 1:
        print("No")
    else:
        print("Yes")

C Problem Verbotene Liste

Problemstellung Gegeben die ganze Zahl $ X $ und die ganze Zahl $ p_1,…, p_N $ der Länge $ N $. Finden Sie die Ganzzahl (nicht unbedingt positiv), die nicht in der Ganzzahlfolge $ p_1,…, p_N $ enthalten ist, die $ X $ am nächsten kommt, dh diejenige mit der geringsten absoluten Differenz zu $ X $. .. Wenn es mehrere solcher Ganzzahlen gibt, beantworten Sie bitte die kleinste.

Die Zahlen, die nicht in der Ganzzahlzeichenfolge enthalten sind, wurden in der Reihenfolge der Eingabe $ X $ gesucht. Wenn $ N $ groß ist, braucht es viel Zeit für `wenn x in Liste:`, also ändere ich die Liste in diktieren, aber dieses Mal, weil $ N $ klein ist, habe ich es so belassen, wie es ist.

Wenn die Eingabe beispielsweise $ 6 $ ist, wird die Suche in der Reihenfolge 6, 5, 7, 4, 8, ... ausgeführt. (Das Programm hat die Eingabe $ x = 6 ± 0 $ zweimal überprüft, aber ich dachte, dass es keinen großen Unterschied in der Ausführungszeit geben würde, also habe ich sie in einer Form implementiert, die einfach zu implementieren ist.)

abc170c.py


x, n = map(int, input().split())
p_list = list(map(int, input().split()))
for i in range(0, n // 2 + 2):
    if x - i not in p_list:
        print(x - i)
        break
    if x + i not in p_list:
        print(x + i)
        break

D Problem Nicht teilbar

Problemstellung Bei einer Folge von $ N $ in der Länge $ A $. Bitte beantworten Sie die Anzahl der Ganzzahlen $ i (1 \ leq i \ leq N) $, die die folgenden Eigenschaften erfüllen. ・ Für jede ganze Zahl $ j (1 \ leq j \ leq N) $, die $ i \ neq j $ ist, ist $ A_i $ nicht durch $ A_j $ teilbar

Ich habe während des Wettbewerbs über verschiedene Ideen nachgedacht, konnte sie aber nicht lösen. Ich habe den folgenden Code für "TLE" eingereicht.

abc170dTLE.py


import collections
n = int(input())
a_list = list(map(int, input().split()))
a_dict = dict(collections.Counter(a_list))
sorted_dict = sorted(a_dict.items(), key=lambda x:x[0])
flag_list = [1] * len(sorted_dict)
i = 0
for key, count in sorted_dict:
    if flag_list[i] == 0:
        i += 1
        continue
    if count > 1:
        flag_list[i] = 0
    i += 1
    j = i
    for key1, count1 in sorted_dict[i:]:
        if flag_list[j] == 0:
            j += 1
            continue
        if key1 % key == 0:
            flag_list[j] = 0
        j += 1
print(sum(flag_list))

Ich dachte, dass der Rechenaufwand in der zweiten Hälfte reduziert werden könnte, indem sortiert und geprüft wird, ob die kleineren die größeren brechen können, aber das war nicht gut.

Tatsächlich wird es verwaltet, indem es in einen Satz gestellt wird und $ 2 $ mal, $ 3 $ mal, $ 4 $ mal, ..., $ k $ mal ($ k $ ist $ a_i × k \ leq a_ {max) Es scheint, dass es gelöst werden kann, indem die maximale Ganzzahl $ k $), die} $ erfüllt, aus der Menge entfernt wird. Ich konnte nicht daran denken.

abc170d.py


import collections
n = int(input())
a_list = list(map(int, input().split()))
a_dict = dict(collections.Counter(a_list))
sorted_dict = sorted(a_dict.items(), key=lambda x:x[0])
a_set = set(a_list)
m = max(a_list)
for key, count in sorted_dict:
    if  key in a_set:
        j = key * 2
        while j <= m:
            a_set.discard(j)
            j += key
    if count > 1:
        a_set.discard(key)
print(len(a_set))

Dies ist das Ende der ersten Hälfte. Persönlich habe ich in letzter Zeit die Zinsen gesenkt, aber das ist natürlich, weil ich mir keine Zeit für die Lösung früherer Fragen in Datenanalyse-Wettbewerben oder beim Schreiben von Papieren sichern konnte. Ich habe viel zu lernen für den Wettbewerb, deshalb möchte ich es nach und nach verdauen (ich möchte die Mindestmethode bis zum nächsten Wettbewerb verstehen und implementieren). Zumindest vorerst möchte ich, dass ABC die Gewohnheit beibehält, jedes Mal für eine Weile teilzunehmen. Vielen Dank für das Lesen bis zum Ende der ersten Hälfte.

Die zweite Hälfte wird das EF-Problem erklären, aber ich glaube nicht, dass ich rechtzeitig einen Artikel schreiben kann (Schweiß).

Recommended Posts

AtCoderBeginnerContest175 Review & Summary (erste Hälfte)
AtCoderBeginnerContest164 Review & Summary (erste Hälfte)
AtCoderBeginnerContest174 Review & Summary (erste Hälfte)
AtCoderBeginnerContest173 Review & Summary (Erste Hälfte)
AtCoderBeginnerContest165 Review & Summary (erste Hälfte)
AtCoderBeginnerContest170 Review & Summary (erste Hälfte)
AtCoderBeginnerContest167 Review & Summary (erste Hälfte)
AtCoderBeginnerContest177 Review & Summary (erste Hälfte)
AtCoderBeginnerContest168 Review & Summary (erste Hälfte)
AtCoderBeginnerContest178 Review & Summary (erste Hälfte)
AtCoderBeginnerContest171 Review & Summary (erste Hälfte)
AtCoderBeginnerContest166 Review & Summary (erste Hälfte)
AtCoderBeginnerContest161 Review & Summary (erste Hälfte)
AtCoderBeginnerContest172 Review & Summary (erste Hälfte)
AtCoderBeginnerContest176 Review & Summary (erste Hälfte)
AtCoderBeginnerContest178 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest161 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest164 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest168 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest169 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest166 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest171 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest174 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest173 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest177 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest180 Review & Zusammenfassung
AtCoderBeginnerContest182 Überprüfung & Zusammenfassung
AtCoderBeginnerContest183 Überprüfung & Zusammenfassung
AtCoderBeginnerContest179 Review & Zusammenfassung
Django Girls Tutorial Zusammenfassung Erste Hälfte
AtCoder Rückblick auf frühere Fragen (erste Hälfte von 12 / 8,9)