[Für Anfänger von Wettkampfprofis] Ich habe versucht, 40 AOJ "ITP I" -Fragen mit Python zu lösen

Einführung

In diesem Artikel stellte AOJ in ["Richtlinien zur Verbesserung von Wettkampfprofis und AtCoder, unterrichtet von Red Coder [Anfänger: Beginnen wir mit Wettkampfprofis]"] vor (https://qiita.com/e869120/items/f1c6f98364d1443148b3) Ich werde 40 Fragen von "Einführung in die Programmierung I" in Python erklären.

Ich selbst habe ohne Programmiererfahrung mit wettbewerbsfähiger Programmierung begonnen. Nach dem Lesen des Einführungsbuchs "Von den Grundlagen der Python-Sprache des Selbststudienprogrammierers zur Arbeitsweise", "Einführung in die Programmierung I" Wir haben an //judge.u-aizu.ac.jp/onlinejudge/finder.jsp?course=ITP1) gearbeitet. Es ist nur eine individuelle Geschichte, aber nachdem Sie 40 Fragen gelöst haben, können Sie beim ** AtCoder Beginner Contest (ABC) **, der bei Atcoder stattfindet, Tee-Performance servieren. Ich denke, dass ich die Grundkenntnisse für wettbewerbsfähige Programmierung erwerben werde.

ITP1_1_A Hello World

ITP1_1_A


print("Hello World")

[Erklärung] print gibt Hello World aus.

ITP1_1_B X:Cubic

ITP1_1_B


x=int(input())
print(x**3)

[Erläuterung] Da "input ()" als Zeichenfolge empfangen wird, wird es verarbeitet, nachdem es mit "int ()" in einen numerischen Wert konvertiert wurde.

ITP1_1_C Rectangle

ITP1_1_C


a,b=map(int,input().split())
print(a*b,2*(a+b))

[Erklärung] input (). Split () kann für 1-zeilige / mehrspaltige Eingaben verwendet werden. Da es jedoch als Zeichenfolge empfangen wird, wird es verarbeitet, nachdem es mit "map" und "int" zu einem numerischen Wert gemacht wurde. Informationen zur Eingabe finden Sie unter "Einführung in Python ab AtCoder".

ITP1_1_D Watch

ITP1_1_D


S=int(input())
print(S//3600,":",(S%3600)//60,":",S%60, sep="")

[Erklärung] Der Quotient aus Sekunden geteilt durch "3600" ist "h", der Quotient aus Sekunden geteilt durch "3600" geteilt durch "60" ist "m" und die Anzahl der Sekunden ist "60". Der Rest nach dem Teilen ist s. Um h, m, s und zu verbinden: mit+, h, m, s muss eine Zeichenfolge sein. Selbst wenn die Zeichenfolge und der numerische Wert gemischt sind, kann sie problemlos ausgegeben werden, wenn es sich um "Drucken" handelt. Informationen zur Ausgabe finden Sie unter "Einführung in Python ab AtCoder".

ITP1_2_A Small, Large, or Equal

ITP1_2_A


a,b=map(int,input().split())
if a>b:
    print("a > b")
elif a<b:
    print("a < b")
else:
    print("a == b")

[Erklärung] Schreiben Sie wie gesagt.

ITP1_2_B Range

ITP1_2_B


a,b,c=map(int,input().split())
if a<b and b<c:
    print("Yes")
else:
    print("No")

[Erklärung] Es gibt kein Problem, auch wenn Sie "a <b <c" schreiben.

ITP1_2_C Sorting Three Numbers

ITP1_2_C


three_numbers=list(map(int,input().split()))
three_numbers.sort()
print(*three_numbers)

[Erklärung] list erscheint zum ersten Mal. list ist ein Objekt, das mehrere Elemente enthält. "[Einführung in Python] Listenverwendung und Methodenübersicht" ist hilfreich. Wenn Sie es sich leisten können, sollten Sie auch "Tupel und Diktat" lernen. Um eine Liste zu sortieren, können Sie "Listenname" .sort () "oder" sortiert ("Listenname") "verwenden. Weitere Informationen zu diesen Unterschieden finden Sie unter "Unterschiede zwischen Sortieren und Sortieren in Python zum Sortieren von Listen".

ITP1_2_D Circle in a Rectangle

ITP1_2_D


W,H,x,y,r = map(int,input().split())
Flag=True
if x+r>W or x-r<0:
    Flag=False
if y+r>H or y-r<0:
    Flag=False
if Flag:
    print("Yes")
else:
    print("No")

[Erläuterung] Stellen Sie sicher, dass die Kreise in horizontaler und vertikaler Richtung nicht über das Rechteck hinausragen. Erstellen Sie ein "Flag" und setzen Sie es auf "False", wenn die Bedingungen nicht mehr erfüllt sind. Wenn es bis zum Ende "True" ist, passt der Kreis in ein Rechteck, andernfalls ist er entweder vertikal oder horizontal. True`` False heißt Bool-Typ. "[Einführung in Python] Lassen Sie uns die Verwendung und Verwendung von Boolean lernen!" wird hilfreich sein.

ITP1_3_A Print Many Hello World

ITP1_3_A


for i in range(1000):
    print("Hello World")

[Erklärung] Dies ist das erste Mal, dass das wiederholte "für" erscheint. Hier ist "[Einführung in Python] Wie man wiederholte Sätze mit for-Anweisungen schreibt" hilfreich.

ITP1_3_B Print Test Cases

ITP1_3_B


case_number=0
while True:
    x=int(input())
    case_number+=1
    if x==0:
        break
    print("Case {}: {}".format(case_number,x))

[Erklärung] Ausführen, bis die Eingabe mit "while" zu "0" wird. Informationen zu "while" finden Sie unter "Schleifenverarbeitung durch Python while-Anweisung (Endlosschleife usw.)". In der Wettbewerbsprogrammierung wird es häufig als "Fall i: Ergebnis" ausgegeben. In Python gibt es mehrere Ausgabemethoden, von denen eine das Format ist. format ist eine String-Methode, mit der Sie Variablen in einen String einbetten können (nur in Python 2.6 und höher verfügbar). Hier ist "[Einführung in Python], wie der Inhalt von Variablen mit der Formatierungsmethode ausgegeben wird" hilfreich.

ITP1_3_C Swapping Two Numbers

ITP1_3_C


while True:
    x,y=map(int,input().split())
    if x==0 and y==0:
        break
    if x>y:
        print(y,x)
    else:
        print(x,y)

[Erklärung] Ausführen, bis die Eingabe mit "while" zu "0 0" wird. Überprüfen Sie danach die Größenbeziehung von "x, y" und Ausgabe.

ITP1_3_D How Many Divisors?

ITP1_3_D


a,b,c=map(int,input().split())
cnt=0
for k in range(a,b+1):
    if c%k==0:
        cnt+=1
print(cnt)

[Erklärung] Überprüfen Sie nacheinander, ob die ganzen Zahlen von "a" bis "b" Brüche von "c" sind. Wenn es sich um einen Bruch handelt, erhöhen Sie "cnt" (Anzahl) um eins.

ITP1_4_A A/B Problem

ITP1_4_A


a,b=map(int,input().split())
print(a//b,a%b,"{:.6f}".format(a/b))

ITP1_4_A (eine andere Lösung)


a,b=map(int,input().split())
print(a//b,a%b,round((a/b),6))

[Erklärung] Das Problem ist, wie der Bruchfehler von "a / b" behandelt wird. Sie können die Dezimalstelle einer Zahl mit format angeben. "Beherrschen der format () -Methode von Python" ist hilfreich. Alternativ kann es gerundet werden, um Bruchfehler innerhalb der Grenzen des Problems zu halten. Bitte beachten Sie, dass "rund" nicht streng gerundet ist. Informationen zum Runden finden Sie unter "Round and Decimal.quantize round and decimal in Python".

ITP1_4_C Simple Calculator

ITP1_4_C


while True:
    a,op,b=input().split()
    a=int(a)
    b=int(b)

    if op=="?":
         break
    if op=="+":
        print(a+b)
    if op=="-":
        print(a-b)
    if op=="*":
        print(a*b)
    if op=="/":
        print(a//b)

[Erläuterung] Ausführen, bis "?" Mit "while" angezeigt wird. Danach werden Addition, Subtraktion, Multiplikation bzw. Division ausgegeben.

ITP1_4_D Min, Max and Sum

ITP1_4_D


N=int(input())
a=list(map(int,input().split()))
print(min(a),max(a),sum(a))

[Erklärung] In Python kann das Maximum, Minimum und die Summe von Liste durchmax (Listenname) `` min (Listenname) `` Summe (Listenname)berechnet werden.

ITP1_5_A Print a Rectangle

ITP1_5_A


while True:
    H,W= map(int,input().split())
    if H==0 and W==0:
        break
    for i in range(H):
        print("#"*W)
    print()

[Erklärung] * wird in der Zeichenfolge wiederholt. Zum Beispiel wird "Hallo Welt" * 3 zu "Hallo Welt Hallo Welt Hallo Welt". Das letzte "print ()" bedeutet eine Zeile zwischen Rechtecken.

ITP1_5_B Print a Frame

ITP1_5_B


while True:
    H,W= map(int,input().split())
    if H==0 and W==0:
        break
    print("#"*W)
    for i in range(H-2):
        print("#"+"."*(W-2)+"#")
    print("#"*W)
    print()

[Erklärung] Ähnlich wie beim vorherigen Problem. Die 1. und H-Zeile sind jedoch "### ・ ・ # ###", aber die 2. bis H-1-Zeile sind "# ......... #". Daher "Ausgabe der ersten Zeile", "Ausgabe von der zweiten Zeile an die H-1-Leitung (dh die H-2-Leitung)" und "Ausgabe der H-Leitung".

ITP1_5_C Print a Chessboard

ITP1_5_C


while True:
    H,W=map(int,input().split())
    if H==0 and W==0:
         break
    for h in range(H):
        for w in range(W):
            if (h+w)%2==0:
                print("#",end="")
            else:
                print(".",end="")
        print()
    print()

[Erklärung] Sie können "für" in "für" schreiben. Es wird eine Doppelschleife genannt. (Referenz: "Pause von mehreren Schleifen (verschachtelt für Schleifen) in Python") Wenn Sie sich das Ausgabemuster, das Sie ausgeben möchten, genau ansehen, sehen Sie eine Linie. Beachten Sie, dass wenn die Summe aus Anzahl und Anzahl der Spalten gerade ist, es "#" ist, wenn es ungerade ist, es "." Ist (Beachten Sie, dass es in "Python" als 0. Zeile, 1. Zeile usw. gezählt wird). Gibt nacheinander jede Zeile aus und bricht in der letzten Spalte ab. Wenn Sie jedoch so etwas wie "print (" # ")" ausführen, tritt nach "#" ein Zeilenumbruch auf. Um dies zu vermeiden, verwenden Sie end =" ", um Zeilenumbrüche bei der Ausgabe zu vermeiden.

ITP1_5_D Structured Programming

ITP1_5_D


N=int(input())
for i in range(1,N+1):
    if i%3==0 or "3" in str(i):
        print(" {}".format(i),end="")
print()

[Erklärung] Verstehen Sie zunächst die Bedeutung des Problems. Es ist schmerzhaft, wenn Sie den C ++ - Code nicht lesen können, aber da C ++ häufig zur Erklärung wettbewerbsfähiger Programmierung verwendet wird, kann es hilfreich sein, ihn lesbar zu machen. Beispielsweise ist der Code für ein Buch, das allgemein als ["Arihon"] bekannt ist (https://www.amazon.co.jp/dp/4839941068/), in C ++ geschrieben. In diesem Problem gibt ** "Unter den natürlichen Zahlen kleiner oder gleich n ein Vielfaches von 3 oder Zahlen mit 3 in aufsteigender Reihenfolge aus" **. Sie können leicht erkennen, dass es sich um ein Vielfaches von 3 handelt, indem Sie den Rest nach dem Teilen durch 3 betrachten. Dieses Mal habe ich "in" als Zeichenfolge verwendet, um zu bestätigen, dass 3 hinzugefügt wurde. Um festzustellen, ob eine beliebige Zeichenfolge enthalten ist, "Suchen Sie eine Zeichenfolge mit Python (bestimmen Sie, ob sie ~ enthält, Position abrufen, zählen)" Wird hilfreich sein.

ITP1_6_A Reversing Numbers

ITP1_6_A


N=int(input())
a=list(map(int,input().split()))
a=a[::-1]
print(*a)

[Erläuterung] Um die Reihenfolge der Liste umzukehren, können Sie nach der Listentypmethode "reverse", der integrierten Funktion "reverse" und dem Slice sortieren. Diesmal habe ich Scheiben verwendet. Die umgekehrte Reihenfolge der Liste ist "Liste oder Zeichenfolge in Python umkehren", aber das Slice ist "Liste oder Zeichen für Python-Slice". "Teilweise Auswahl / Ersetzung von Spalten" ist hilfreich.

ITP1_6_B Finding Missing Cards

ITP1_6_B


N=int(input())
suits=["S","H","C","D"]
cards=[]
for _ in range(N):
    s,n=input().split()
    if s=="S":
        cards.append(int(n))   
    elif s=="H":
        cards.append(13+int(n))   
    elif s=="C":
        cards.append(26+int(n))
    else:
        cards.append(39+int(n))

for i in range(1,53):
    if i not in cards:
        print(suits[(i-1)//13],(i-1)%13+1)

[Erklärung] Lassen Sie uns darüber nachdenken, wie Sie die Trump-Marke und die Zahl zusammen ausdrücken können. Markierungen und Zahlen können gleichzeitig dargestellt werden, indem Pik von 1 bis 13, Herzen von 14 bis 26, Klee von 27 bis 39 und Diamanten von 40 bis 52 dargestellt werden. Zum Beispiel wird 3 des Herzens 16. Machen Sie dann eine Liste der Karten, die Sie zuerst hatten. Überprüfen Sie danach, ob Sie die Zahlen von 1 bis 52 (dh alle 52 Spielkarten) nacheinander haben, und geben Sie sie aus, wenn Sie sie nicht haben.

[Memo] Tatsächlich ist es notwendig, vorsichtig zu sein, wenn Sie "in" für Probleme verwenden, bei denen der Rechenaufwand berücksichtigt werden muss. Informationen zur Berechnungsmenge finden Sie unter "Zusammenfassung zur Berechnung der Berechnungsmenge! ~ Woher das Protokoll stammt ~". Überprüfen, ob "i" in "Liste" ist Der Berechnungsbetrag in "i in Liste" beträgt $ O (n) $. Dies bedeutet, dass jedes Element in "Liste" überprüft wird, um festzustellen, ob "i" gleich ist. Es gibt kein Problem, wenn die Anzahl ungefähr der Anzahl der Spielkarten entspricht. Wenn die Anzahl jedoch groß ist, kann der Rechenaufwand enorm sein. Seien Sie also vorsichtig.

ITP1_6_C Official House

ITP1_6_C


N=int(input())
room=[[[0]*10 for _ in range(3)] for _ in range(4)]

for _ in range(N):
    b,f,r,v=map(int,input().split())
    room[b-1][f-1][r-1]+=v

for i in range(4):
    for j in range(3):
        for k in range(10):
            print(" {}".format(room[i][j][k]), end="")
        print()
    if i!=3:
        print("####################")

[Erklärung] Dieses Problem kann mit einem mehrdimensionalen Array gelöst werden. "Umgang mit mehrdimensionalen Arrays in Python [für Anfänger]" ist hilfreich. Das Anpassen des Ausgabeformats ist eine Herausforderung.

ITP1_6_D Matrix Vector Multiplication

ITP1_6_D


n,m=map(int,input().split())
A=[list(map(int,input().split())) for i in range(n)]
b=[int(input()) for i in range(m)]
for i in range(n):
    ans=0
    for j in range(m):
        ans+=A[i][j]*b[j]
    print(ans)

[Erklärung] Dieses Problem kann auch durch Verarbeitung mit einem mehrdimensionalen Array gelöst werden. Es wird eine Matrixberechnung sein.

ITP1_7_A Grading

ITP1_7_A


while True:
    m,f,r=map(int,input().split())
    if m==-1 and f==-1 and r==-1:
        break
    sum=m+f
    if m==-1 or f==-1 :
        print("F")
    elif sum>=80:
        print("A")
    elif sum>=65:
        print("B")
    elif sum>=50:
        print("C")
    elif sum>=30:
        if r>=50:
            print("C")
        else:
            print("D")
    else:
        print("F")

[Erläuterung] Lesen Sie das Problem sorgfältig durch und führen Sie eine bedingte Verzweigung durch.

ITP1_7_B How many ways?

ITP1_7_C


while True:
    n,x=map(int,input().split())
    if n==0 and x==0 :
        break
    cnt=0
    for i in range(1,n-1):
        for j in range(i+1,n):
            if j<x-i-j<=n:
                cnt+=1
    print(cnt)

[Erklärung] Dies ist ein Problem, das ein wenig mathematisches Denken erfordert. Erwägen Sie, drei Zahlen von den Zahlen bis zu "n" ohne Duplizierung hinzuzufügen, um "x" zu machen. Angenommen, Sie möchten 9 aus einer Zahl von 1 bis 5 machen. Zu diesem Zeitpunkt sind "1 + 3 + 5" und "3 + 5 + 1" dieselbe Zahlenkombination, daher werden sie als dieselbe Kombination angesehen. Um solche Kombinationen nicht mehrmals zu zählen, wählen wir unter der Regel aus, dass "die als nächstes zu wählende Zahl immer größer ist als die zuvor ausgewählte Zahl". Wählen Sie zuerst "i" und dann ein größeres "j". Wenn danach "x-i-j" größer als "j" und kleiner als "n" ist, wird es als Kombination festgelegt.

ITP1_7_C Spreadsheet

ITP1_7_C


r,c=map(int,input().split())
sheet=[list(map(int,input().split())) for i in range(r)]
for i in range(r):
    sheet[i].append(sum(sheet[i]))
Column_sum=[0]*(c+1)
for j in range(c+1):
    for i in range(r):
        Column_sum[j]+=sheet[i][j]

for i in range(r):
    print(*sheet[i])
print(*Column_sum)

[Erklärung] Erstellen Sie zunächst ein zweidimensionales Array von r * c. Suchen und addieren Sie die Summe für jede Zeile und die Summe für jede Spalte. Es ist ein Problem, das durch die Kombination der herkömmlichen Ideen gelöst werden kann. Dieses Mal ist die Summe der Zeilen "Summe", und die Summe der Spalten wird berechnet, indem die Nummer der j-ten Spalte jeder Zeile um eins addiert wird.

ITP1_7_D Matrix Multiplication

ITP1_7_D


n,m,l=map(int,input().split())
A=[list(map(int,input().split())) for i in range(n)]
B=[list(map(int,input().split())) for i in range(m)]

C=[]
for i in range(n):
    line=[]
    for j in range(l):
        c=0
        for k in range(m):
            c+=A[i][k]*B[k][j]
        line.append(c)
    C.append(line)

for line in C:
    print(*line)

[Erklärung] Ein zweidimensionales Array wird verwendet. Sie müssen den Index verstehen und schreiben.

ITP1_8_A Toggling Cases

ITP1_8_A


words=input()
print(str.swapcase(words))

[Erläuterung] Es gibt verschiedene Methoden, mit denen zwischen Groß- und Unterbuchstaben konvertiert werden kann. Dieses Problem kann leicht gelöst werden, indem einer von ihnen, "Swapcase", verwendet wird. Es gibt andere Methoden, die Sie kennen sollten, wie "oben" und "unten". Vielleicht möchten Sie "Python-Alphabete konvertieren (obere / untere / Großbuchstaben / Swapcase / Titel)" lesen.

ITP1_8_B Sum of Numbers

ITP1_8_B


while True:
    str_n=input()
    if str_n=="0":
        break
    list_n=list(str_n)
    ans=0
    for n in list_n:
        ans+=int(n)
    print(ans)

ITP1_8_B alternative Lösung


while True:
    str_n=input()
    if str_n=="0":
        break
    print(sum(list(map(int,str_n))))

[Erklärung] Dieses Mal wage ich es, den numerischen Wert als Zeichenfolge zu erhalten. Listen Sie die Zeichenfolgen auf. Wenn Sie beispielsweise für die Zeichenfolge "123" "list (" 123 ")" verwenden, ist dies "[" 1 "," 2 "," 3 "]". Verwenden Sie danach "for", um die Nummer jedes Ortes nacheinander zu extrahieren. Es kann jedoch als Zeichenfolge extrahiert werden. Konvertieren Sie es daher mit "int ()" in einen numerischen Wert und fügen Sie es dann hinzu. Sie können auch präziser mit "map" schreiben, das bisher als Standardeingabe verwendet wurde.

ITP1_8_C Counting Characters

ITP1_8_C


import sys
texts=sys.stdin.read()
texts=texts.lower()
cnt=[0]*26

letters=list('abcdefghijklmnopqrstuvwxyz')
for x in texts:
    i=0
    for y in letters:
        if x==y:
            cnt[i]+=1
        i+=1
for i in range(26):
    print(letters[i]+" : "+str(cnt[i]))

[Erklärung] Bisher wurde die Standardeingabe mit "Eingabe" empfangen. Dieses Mal muss ich einen englischen Satz lesen, der mehrere Zeilen enthält, und ich kenne die Anzahl der Zeilen nicht. Es ist möglich, "while" und "input" zu kombinieren, aber das sys-Modul "sys.stdin.read" zu verwenden. Sie können eine mehrzeilige Zeichenfolge so wie sie ist empfangen. Für Details empfängt ["Python] Daten von der Tastatur mit Standardeingabe (sys.stdin.readlines, Eingabefunktion)"](https://algorithm.joho.info/programming/python-sys-stdin-readline/#toc3) Bitte beziehen Sie sich auf. Machen Sie nach der Eingabe alle unteren Buchstaben, überprüfen Sie das Alphabet nacheinander auf Englisch und zählen Sie.

ITP1_8_D Ring

ITP1_8_D


s=input()
p=input()
s*=2
if s.find(p)!=-1:
    print("Yes")
else :
    print("No")

[Erläuterung] Überlegen Sie, ob Sie aus einer ringförmigen Zeichenfolge eine bestimmte Zeichenfolge erstellen können. Ringförmige Saiten haben keinen Anfang und kein Ende, und Sie können so lange Saiten erstellen, wie Sie möchten. Bei diesem Problem ist die Bedingung jedoch, dass "p" kürzer als "s" ist. Daher reicht es aus, über zwei Runden des Rings nachzudenken. Erstellen Sie eine Zeichenfolge, die den beiden Runden des Rings entspricht, und prüfen Sie, ob Sie dort "p" machen können. Verwenden Sie die String-Methode find, um zu sehen, ob es einp gibt. find ruft die Position einer bestimmten Zeichenfolge ab, gibt jedoch -1 zurück, wenn keine Zeichenfolge vorhanden ist. "Suchen Sie mit Python nach einer Zeichenfolge (bestimmen Sie, ob sie ~ enthält, ermitteln Sie die Position, zählen Sie)" ist hilfreich.

ITP1_9_A Finding a Word

ITP1_9_A


import sys
word=input()
text=sys.stdin.read()
print(text.lower().split().count(word))

[Erklärung] Die Eingabe erfolgt mit sys.stdin.read. Ich werde über "text.lower (). Split (). Count (word)" erklären. Verwenden Sie lower (), um es niedriger zu machen. Verwenden Sie split (), um eine durch Leerzeichen getrennte Liste zu erstellen. Es ist dasselbe wie "Teilen" von "Eingabe (). Teilen ()" mit normaler Standardeingabe. "Zeichenfolge mit Python teilen (Trennzeichen, Zeilenumbruch, regulärer Ausdruck, Anzahl der Zeichen)" ist hilfreich. Verwenden Sie die Methode "count", um herauszufinden, wie viele in der Liste enthalten sind. "[Python] Das Zählen der Anzahl der Vorkommen eines bestimmten Zeichens oder einer bestimmten Zeichenfolge (Anzahl)" ist hilfreich.

ITP1_9_B Shuffle

ITP1_9_B


while True:
    cards=input()
    if cards=="-":
        break
    m=int(input())
    for i in range(m):
        sh=int(input())
        former=cards[:sh]
        later=cards[sh:]
        cards=later+former
    print(cards)

[Erklärung] Es kann mit Slices in der Liste gelöst werden.

ITP1_9_C Card Game

ITP1_9_C


n=int(input())
T=0
H=0
for i in range(n):
    card_t,card_h=input().split()
    if card_t==card_h:
        T+=1
        H+=1
    else:
        if card_h>card_t:
            H+=3
        else:
            T+=3
print(T,H)

[Erläuterung] Wenn Sie in der Zeichenfolge > oder < verwenden, wird das Ergebnis des Vergleichs in lexikalischer Reihenfolge zurückgegeben. Sie können dies verwenden, um es zu lösen.

ITP1_9_D Transformation

ITP1_9_D


text=input()
n=int(input())
for i in range(n):
    order=input().split()
    a,b=map(int,order[1:3])
    if order[0]=="print":
        print(text[a:b+1])
    elif order[0]=="reverse":
        re_text=text[a:b+1]
        text=text[:a]+re_text[::-1]+text[b+1:]
    else :
        text=text[:a]+order[3]+text[b+1:]

[Erklärung] Wie zuvor können Sie es mit Slices der Liste lösen. Sie müssen jedoch ein wenig vorsichtig sein, wenn Sie "Rückwärts" verwenden. Wenn "step" in einem Slice in "-1" geändert wird, werden "start" und "end" nicht wörtlich interpretiert. Diese Frage ist hilfreich. Dieses Mal habe ich eine Liste des Bereichs erstellt, den ich umkehren möchte, und dann in umgekehrter Reihenfolge.

ITP1_10_A Distance

ITP1_10_A


x1,y1,x2,y2=map(float,input().split())
print(((x1-x2)**2+(y1-y2)**2)**0.5)

[Erklärung] Die Route kann berechnet werden, indem das Modul "math" importiert und "math.sqrt ()" oder "** 0.5" verwendet wird.

ITP1_10_B Triangle

ITP1_10_B


import math
a,b,C=map(float,input().split())
θ=math.radians(C)
h=b*math.sin(θ)
S=(a*h)/2
c=math.sqrt(a**2+b**2-2*a*b*math.cos(θ))
L=a+b+c
print(S,L,h,sep="\n")

[Erklärung] Das Dreiecksverhältnis verwendet das Modul "math". Die Konvertierung zwischen Radian und Frequenzmethode ist "Gegenseitige Konvertierung zwischen Radian und Frequenzmethodeneinheit", und das trigonometrische Verhältnis ist ["Dreiecksfunktion mit Python berechnen (sin, cos , tan, arcsin, arccos, arctan) "(https://note.nkmk.me/python-math-sin-cos-tan/) wird hilfreich sein. Die Länge von c wird nach dem Kosinussatz berechnet.

ITP1_10_C Standard Deviation

ITP1_10_C


while True:
    n=int(input())
    if n==0:
        break
    score=list(map(int,input().split()))
    mean=sum(score)/n
    var_sum=0
    for i in range(n):
        var_sum+=(score[i]-mean)**2
    print((var_sum/n)**0.5)

[Erläuterung] Statistiken können mit Modulen wie "Statistik" berechnet werden, diesmal jedoch wie in der Problemstellung beschrieben. Berechnen Sie zunächst den Durchschnittswert. Finden Sie den Durchschnitt des Quadrats der Differenz vom Durchschnittswert. Das ist Verteilung. Wenn Sie diese Route wählen, ist dies die Standardabweichung, nach der Sie diesmal suchen.

ITP1_10_D Distance II

ITP1_10_D


def Distance(X,Y,p):
    s=0
    for x,y in zip(X,Y):
        s+=abs(x-y)**p
    print(s**(1/p))

n=int(input())
X=list(map(int,input().split()))
Y=list(map(int,input().split()))

for p in range(1,4):
    Distance(X,Y,p)
print(max(abs(x-y) for x,y in zip(X,Y)))

[Erläuterung] Bisher haben wir vorhandene Bibliotheken verwendet, Sie können jedoch auch Ihre eigenen Funktionen definieren. Dieses Mal definieren wir eine Funktion, die den Abstand "Abstand" ausgibt. Informationen zur Funktionsdefinition finden Sie unter "Definieren und Aufrufen einer Funktion in Python (def, return)". Nur die Entfernung von Chebyshev wird separat berechnet. Die Funktion "zip" ist auch nützlich, wenn Sie Elemente aus mehreren Listen abrufen. "Verwendung von Python, Zip-Funktion: Mehrere Listenelemente gleichzeitig abrufen" ist hilfreich.

Schließlich

Beim Schreiben des Kommentars habe ich versucht, so viele Informationen wie möglich so präzise und berührbar wie möglich zu gestalten. Ich habe es gewagt, Probleme zu lösen, die durch die Verwendung mehrerer Listen mit einem mehrdimensionalen Array gelöst werden können. Ich habe jedoch versucht, ein oder zwei neue Dinge pro Frage beizubehalten, damit es nicht plötzlich schwierig wird. Ich bin noch ein Anfänger, aber ich denke, es ist ein Artikel, der mich glücklich macht, wenn ich gerade mit Python anfange. Nach "Einführung in die Programmierung I" "lehrt Sie Red Coder, Ihre Konkurrenz pro / AtCoder zu verbessern" Ich denke, Sie sollten das Problem der vollständigen Suche angehen, wie es in der Richtlinie [Anfänger: Starten wir den Wettbewerb pro] eingeführt wurde. Während ich an dem vollständigen Suchproblem arbeitete, übte ich auch das schnelle Lösen, damit ich die drei Fragen A, B und C des ABC-Wettbewerbs innerhalb von insgesamt 30 Minuten lösen konnte. Ich hoffe, es wird für alle hilfreich sein. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

[Für Anfänger von Wettkampfprofis] Ich habe versucht, 40 AOJ "ITP I" -Fragen mit Python zu lösen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 5/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 7/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 4/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 3/22].
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 1/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 6/22]
Tohoku University 2020 Early Mathematical Exam (Science) Ich habe versucht, die großen Fragen 1 bis 3 mit Python zu lösen
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich wollte ABC160 mit Python lösen
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, TSP mit QAOA zu lösen
Ich wollte ABC172 mit Python lösen
[Python] Ich habe versucht, Wörter, die für Anfänger schwer zu verstehen sind, auf leicht verständliche Weise zu erklären.
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Ich habe versucht, AtCoders Depth Priority Search (DFS) in Python zu lösen (Ergebnis: TLE ...)
Wie man offline in Echtzeit schreibt Ich habe versucht, E12 mit Python zu lösen
Ich wollte den NOMURA Contest 2020 mit Python lösen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
[Einführung für Anfänger] Umgang mit MySQL mit Python
Ich habe versucht, die Zusammenführungssortierung in Python mit möglichst wenigen Zeilen zu implementieren
Python / PEP8> E128 Ich habe versucht, die für den visuellen Einzug unter eingerückte Fortsetzungszeile aufzulösen
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
[Für Anfänger] Web-Scraping mit Python "Greifen Sie auf die URL auf der Seite zu, um den Inhalt abzurufen."
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen