[PYTHON] Bei Coder (2020/09/08)

AtCoder Beginner Contest 006 Beginnen wir also mit 006 des AtCoder Beginner Contest! (Bitte denken Sie daran, dass Sie nicht mit 001 beginnen sollten ...)

Problem-A

Die Nummer N ist angegeben. Ausgabe JA, wenn N 3 enthält oder durch 3 teilbar ist, andernfalls Ausgabe NEIN.

A.py


N = int(input())
if N % 3 == 0:
    print("YES")
else:
    print("NO")

Ist es eine etwas einfachere Version des FizzBuzz-Problems? Vergessen Sie nicht, bei der Beantwortung einen Zeilenumbruch einzufügen.

Problem-B

Es gibt eine Tribonacci-Sequenz. Diese Zahlenfolge ist die Summe der Zahlen bis zu drei. Genau genommen

a_1=0, a_2=0, a_3=1 \\
a_n=a_{n-1}+a_{n−2}+a_{n−3}

Ist definiert als. Suchen Sie den Rest des n-ten Terms dieser Sequenz, $ a_n $ geteilt durch 10007.

B.py


n = int(input())
a, b, c = 0, 0, 1

for i in range(n-1):
    a, b, c = (b % 10007), (c % 10007), ((a+b+c) % 10007)
print(a)

Ich bin anfällig für diese Art von Problem, durch eine große Zahl (z. B. 10 ^ 7) zu teilen und den Rest anzuzeigen. Vor kurzem habe ich Maßnahmen ergriffen, um die endgültige Antwort jedes Mal zu berechnen, anstatt sie durch eine große Zahl zu teilen. .. Eine andere Möglichkeit, über dieses Problem nachzudenken, besteht darin, im Fall von $ a_1 $ und $ a_2 $ zur Ausgabe 0 zu verzweigen und in anderen Fällen eine for-Anweisung mit der Schleifenzahl als n-3 zu drehen. .. (Ich werde es auf git hochladen.)

Problem-C

"Es gibt N Menschen in dieser Stadt. Es gibt drei Arten von Menschen: Erwachsene, alte Menschen und Babys. Die Gesamtzahl der Beine von Menschen in dieser Stadt beträgt M, zwei erwachsene Beine und alte Menschen. Angenommen, 3 Beine und 4 Babybeine, beantworten Sie eine mögliche Kombination von Menschen. "

C.py


n, m = map(int, input().split())

for a in range(n+1):
  b = 4*n -2*a - m
  c = n -a -b
  if b >= 0 and c >= 0:
    print(a, " ", b, " ", c)
    break
else:
  print("-1 -1 -1")

Es sind verschiedene Dinge geschrieben

a+b+c=N \\
2a+3b+4c=M

Es ist der gleiche Wert wie das Lösen der simultanen Gleichungen von. Ich kann meine Kenntnisse der Mathematik unerwartet nutzen, deshalb möchte ich vorsichtig sein, um sie nicht aus dem Kopf zu bekommen.

Als ich mich auf die Lösungsmethode bezog, sah ich übrigens eine xrange-Funktion anstelle einer range-Funktion. Ich habe es zum ersten Mal gesehen, also habe ich einen Artikel wie diesen gefunden, als ich ihn nachgeschlagen habe.

Änderungen von Python 2 zu Python 3.0

Ich sehe, es wurde ohne dein Wissen abgeschafft. Ich wusste es überhaupt nicht, da ich es von Python3 verwendet habe. Es könnte eine gute Idee sein, diese Gelegenheit zu nutzen, um Iteratoren zu studieren.

Problem-D

Es gibt N Karten mit Nummern. Die folgenden Vorgänge können für dieses Kartenbündel (Deck) ausgeführt werden. Nehmen Sie eine Karte aus dem Stapel und legen Sie sie an einer beliebigen Stelle ein. Finden Sie von oben nach unten im Deck die Mindestanzahl von Vorgängen, die erforderlich sind, um die Karten in aufsteigender Reihenfolge zu sortieren.

D.py


import bisect

n = int(input())
cards = [int(input()) for i in range(n)]

sort_after_cards = [0]
for card in cards:
  if sort_after_cards[-1] < card:
    sort_after_cards.append(card)
  else:
    index = bisect.bisect_left(sort_after_cards, card)
    sort_after_cards[index] = card    
print(n - len(sort_after_cards) +1)

Das Bild ist wie das Zeichnen einer Karte auf dem Deck, um ein anderes Deck zu erstellen. Und um es in aufsteigender Reihenfolge zu schaffen, muss eine größere Zahl als die Originalkarte unter das Deck kommen. Wenn also eine kleinere Zahl kommt, bringen wir sie durch Dichotomisierung in die Position der wahren Liebe zurück. Schließlich wird eine aufsteigende Deckliste erstellt, die die ausgetauschten Karten ausschließt. Wenn Sie nur aufsteigende Reihenfolge verwenden möchten, können Sie sortieren oder sortieren verwenden.

abschließend

Zum ersten Mal hatte ich Schwierigkeiten zu verstehen. Insbesondere bin ich der Meinung, dass C- und D-Probleme erforderlich sind, um den Rechenaufwand zu verringern und die Effizienz zu verbessern, indem mathematisches Denken und Algorithmen voll genutzt werden. In den letzten Wettbewerben bin ich in guter Verfassung und kann nur C-Probleme lösen. Deshalb werde ich viel üben und versuchen, verschiedene Ideen zu entwickeln.

Recommended Posts

Bei Coder (2020/09/08)
Füllen Sie bei Coder
Bei Coder # 1 um Mitternacht
[At Coder] Ausgabemethode
[Bei Coder] ABC128B - Handbuch
[Bei Coder] Acing C-XYZ Triplets
[Python] Competitive Pro-Vorlage [At Coder]
[At Coder] ABC085C - Otoshidamas Python-Antwort
[At Coder] Anfängerwettbewerb 175 Einführung in die ABCD-Python-Lösung
[Python] ABC133B (Problem mit dem oberen rechten Dreieck) [At Coder]
Studiere in Zundoko
Python bei Docker
[Bei Coder] Lösen Sie das Problem der Dichotomie
[Python] ABC159D (High School Mathematics nCr) [Bei Coder]
[Python] AGC043A (Problemlesefähigkeit und DP) [At Coder]
[Bei Coder] Lösen eines typischen BFS-Problems [A - Dunkler und Dunkler]
[Python] [BFS] Beim Coder-Anfängerwettbewerb 168-D [.. Double Dots]
Ich habe At Coder Beginner Selection ausprobiert