[PYTHON] Sumitomo Mitsui Trust Bank Programmierwettbewerb 2019 Rückblick

Die Überprüfung ist ziemlich spät, aber ich habe alle gelöst, daher möchte ich einen Artikel schreiben. Ich habe vier Abschlüsse gemacht, aber mein Eindruck war, dass ich fünf abschließen wollte, weil EF (insbesondere F) eine einfache Zeit war.

Problem A

answerA.py


m1,d1=map(int,input().split())
m2,d2=map(int,input().split())
if m1==m2:
    print(0)
else:
    print(1)

Es wird nur festgestellt, ob m1 und m2 unterschiedlich sind.

B-Problem

answerB.py


x=[]
for i in range(1,50001):
    x.append(int(i*1.08))

n=int(input())
for i in range(50000):
    if n==x[i]:
        print(i+1)
        break
else:
    print(":(")

Die Problemstellung war etwas lang, deshalb habe ich mir etwas zu viel Zeit genommen. Packen Sie alle möglichen Zahlen in das erste Array x und ändern Sie die Ausgabe abhängig davon, ob es eine entsprechende Zahl gibt. Python ist praktisch, da es einfach ist, mit der else-Anweisung zu schreiben, wenn die Ausgabe geändert wird, je nachdem, ob sie unterbrochen werden soll oder nicht.

C-Problem

answerC.py


x=int(input())
y=x//100
z=x%100
if z<=y*5:
    print(1)
else:
    print(0)

Da es sich um 100 + k handelt (eine ganze Zahl von 0 <= k <= 5), können Sie sehen, dass Sie bis zu x // 100 Artikel kaufen können. (Es ist notwendig, es zu maximieren, da wir den Bereich des Ausdrucks im folgenden Satz maximieren möchten.) Wenn zu diesem Zeitpunkt x% 100 innerhalb von 0 ~ (x // 100) * 5 liegt, ist es genau X Yen. Da dies möglich ist, wird es ausgegeben, je nachdem, ob dies möglich ist oder nicht. (Ich habe meinen Verstand mehr als das übliche C-Problem benutzt, aber ich war überrascht, dass eine gute Anzahl von Menschen durchgekommen ist.)

D Problem

answerD.py


n=int(input())
s=[int(i) for i in input()]

def my_index(l,x,ind):
    '''
    l-Iterierbares Objekt
    x-Wert, den Sie finden möchten
    ind-Index, nach dem Sie suchen möchten
Rückgabewert-Index, wenn es existiert, wenn es nicht existiert-1
    '''
    global n
    if ind==n:
        return -1
    for i in range(ind,n):
        if l[i]==x:
            return i
    else:
        return -1

c=0
for i in range(10):
    x1=my_index(s,i,0)
    if x1!=-1:
        for j in range(10):
            x2=my_index(s,j,x1+1)
            if x2!=-1:
                for k in range(10):
                    if my_index(s,k,x2+1)!=-1:
                        c+=1
print(c)

Ich war verwirrt von N, aber am Ende gibt es nur 10 * 10 * 10 3 Ziffern, so dass ich sehen kann, dass ich nur alle überprüfen muss. Ich habe die Funktion my_index jedoch selbst erstellt, da die Verwendung der Indexfunktion von Python einen Fehler auslöst, wenn das Element in diesem Objekt nicht vorhanden ist. Sobald Sie dies wissen, können Sie von vorne herausfinden, ob 10 * 10 * 10 verschiedene Passwörter in der Reihenfolge vorhanden sind.

Nachtrag (12/11)

Wenn Sie s als Zeichenfolge behandeln, ohne es aufzulisten, können Sie es durch die Suchfunktion ersetzen, ohne die Funktion my_index vorzubereiten.

E Problem

answerE.py


#Von vorne gezählt, ist das, was passiert, eindeutig bestimmt
import collections

n=int(input())
b=[[0,0,0]]
a=[int(i) for i in input().split()]

def my_index(l, x):
    if x in l:
        return l.index(x)
    else:
        return -1

for i in range(n):
    k=my_index(b[-1],a[i])
    if k==-1:
        print(0)
        break
    b.append([b[-1][j]+1 if j==k else b[-1][j] for j in range(3)])
else:
    x=1
    for i in range(n):
        x=x*b[i].count(a[i])%1000000007
    print(x)

Der Eindruck, dass E am schwierigsten war. (Ich habe es gelöst, nachdem ich die Antwort gesehen hatte.) Wenn die Anzahl der Personen, die Hüte jeder Farbe tragen, als ai, bi, ci und xi, yi, zi in absteigender Reihenfolge der Anzahl der Personen festgelegt wird, werden die Bemerkungen der 1. bis i-ten Personen als Grundlage verwendet. Dies ermöglicht es, die Werte von xi, yi und zi eindeutig zu bestimmen. (Einzelheiten finden Sie unter Antwort. Sie können dies herausfinden, indem Sie Ihre Hand bewegen.) Die Sequenz b enthält die Kombinationen von xi, yi und zi bis zur i-ten Person (am 1. Ursprung), und durch Verschieben von i von 0 nach n-1 wird die Kombination für jedes i erhalten. Wenn hier die Anzahl der in der i + 1-ten Aussage genannten Personen (a [i]) in b [i] existiert, ist die Anzahl der Hüte jeder Farbe in der i + 1-ten Aussage und der i-ten Person Obwohl es keinen Widerspruch gibt, wird das Element der entsprechenden Anzahl von Personen um +1 erhöht und kann b [i + 1] sein. Es gibt jedoch einen Fall (k = -1), in dem die Anzahl der Hüte jeder Farbe bis zur i-1. Person nicht mit der Bemerkung der i-ten Person übereinstimmt. In diesem Fall wird 0 ausgegeben und eine Unterbrechung durchgeführt. Bis zu diesem Punkt kann die Anzahl der Farbhüte für jedes i berechnet werden, aber wenn es in b [i] mehrere a [i] gibt, werden in der i + 1-ten Anweisung mehrere Farben erwähnt. Sie finden die Antwort, indem Sie die Möglichkeiten in jedem b [i] mit a [i] multiplizieren.

F Problem

answerF.py


import math
t1,t2=map(int,input().split())
a1,a2=map(int,input().split())
b1,b2=map(int,input().split())
#Relative Geschwindigkeit
c1,c2=a1-b1,a2-b2
#Weit entfernt
d1,d2=abs(c1*t1),-abs(c2*t2)

if (c1>0 and c2>0) or (c1<0 and c2<0) or d1+d2>0:
    print(0)
elif d1+d2==0:
    print("infinity")
else:
    x=d1//(-(d1+d2))
    y=d1%(-(d1+d2))
    if y==0:
        print(2*x)
    else:
        print(2*x+1)

Ich habe während des Wettbewerbs keine Probleme gesehen, war aber sehr enttäuscht, weil es nach dem Wettbewerb überraschend einfach zu lösen war. Da wir uns treffen werden, sollten wir die relative Position berücksichtigen und zuerst die relative Geschwindigkeit (c1 und c2) ermitteln. Von hier aus werden wir die Bedingungen abzweigen. IMG_0089.PNG

Erstens gibt es unter Berücksichtigung von Mustern, die keine endlichen Zeiten sind, die obigen vier Muster. Wenn c1 und c2 beide positiv sind (Muster ①) und c1 und c2 beide negativ sind (Muster ②), sind sie immer getrennt und treffen sich nicht. Selbst wenn die relative Positionsverschiebung zum Zeitpunkt T1 größer ist als die relative Positionsverschiebung zum Zeitpunkt T2 (Muster ③), werden sie immer voneinander getrennt, sodass sie sich nicht treffen. Wenn die relative Positionsverschiebung in der T1-Zeit dieselbe ist wie die relative Positionsverschiebung in der T2-Zeit (Muster ④), ändert sich die relative Position in einem Zyklus von T1 und T2 nicht, sodass sie unbegrenzt fortgesetzt wird.

Betrachten Sie abschließend den Fall einer endlichen Anzahl von Treffen. Zu diesem Zeitpunkt ist der Abstand zwischen T1 und T2 für positiv und negativ unterschiedlich. Nehmen Sie also den absoluten Wert und machen Sie es sich leicht, ihn als positiv für T1 und negativ für T2 zu betrachten. (Der Rest der Erklärung wird handgeschrieben.) IMG_0090.PNG Wie oben erwähnt, konnte ich in allen Fällen die Anzahl der Begegnungen zählen.

Zusammenfassung

Schauen wir uns vorerst das letzte Problem an. Machen Sie ein festes Urteil darüber, ob es gelöst werden kann oder nicht. (Manchmal lasse ich es fallen, ohne ein Problem zu sehen, das lösbar zu sein scheint, und manchmal versuche ich, ein scheinbar schwieriges Problem zu lösen.) Es ist dasselbe wie die Mathematik, um eine Prüfung abzulegen, zu überlegen und zu experimentieren, selbst wenn Sie ungeduldig sind.

Recommended Posts

Sumitomo Mitsui Trust Bank Programmierwettbewerb 2019 Rückblick
Teilnahmebericht des AtCoder Sumitomo Mitsui Trust Bank Programmierwettbewerbs 2019
[Python] Sumitomo Mitsui Trust Bank Programmierwettbewerb 2019 C (Verwendung von DP) [AtCoder]
Keyence Programming Contest 2020 Rückblick
Rückblick auf den NOMURA-Programmierwettbewerb 2020
HHKB Programmierwettbewerb 2020 Rückblick
Tokio Marine & Nichido Programmierwettbewerb 2020 Rückblick
Yukicoder-Wettbewerb 259 Bewertung
Yukicoder-Wettbewerb 264 Bewertung
Acing Programmierwettbewerb 2020
Yukicoder-Wettbewerb 261 Bewertung
Yukicoder-Wettbewerb 267 Bewertung
HHKB Programmierwettbewerb 2020
Yukicoder-Wettbewerb 266 Bewertung
Yukicoder-Wettbewerb 263 Bewertung
Yukicoder-Wettbewerb 268 Bewertung
AtCoder Anfängerwettbewerb 152 Rückblick
AtCoder Regular Contest 105 Bewertung
AtCoder Beginner Contest 160 Bewertung
AtCoder Anfängerwettbewerb 178 Bewertung
AtCoder Anfängerwettbewerb 166 Bewertung
AtCoder Anfängerwettbewerb 167 Bewertung
AtCoder Beginner Contest 164 Bewertung
AtCoder Beginner Contest 169 Bewertung
AtCoder Grand Contest 048 Bewertung
Nach dem "Diverta 2019 Programmierwettbewerb"
AtCoder Beginner Contest 171 Bewertung
AtCoder Beginner Contest 182 Bewertung
AtCoder Beginner Contest 180 Bewertung
AtCoder Anfängerwettbewerb 177 Rückblick
AtCoder Anfängerwettbewerb 168 Bewertung
AtCoder Grand Contest 045 Bewertung
AtCoder Grand Contest 044 Bewertung
AtCoder Beginner Contest 179 Bewertung
AtCoder Beginner Contest 172 Bewertung
AtCoder Regular Contest 106 Bewertung
AtCoder Anfängerwettbewerb 176 Bewertung
AtCoder Grand Contest 046 Bewertung
AtCoder Anfängerwettbewerb 175 Bewertung
AtCoder Anfängerwettbewerb 174 Bewertung
AtCoder Beginner Contest 153 Bewertung
AtCoder Anfängerwettbewerb 156 Bewertung
AtCoder Beginner Contest 161 Bewertung
AtCoder Beginner Contest 170 Bewertung
AtCoder Regular Contest 104 Bewertung
AtCoder Beginner Contest 165 Bewertung
AtCoder Beginner Contest 173 Bewertung
AtCoder Anfängerwettbewerb 155 Bewertung
AtCoder Beginner Contest 162 Bewertung