[PYTHON] [Wettkampfpraxis] Ich habe den AtCoder Beginner Contest 171 ausprobiert

Wir haben am AtCoder Beginner Contest 171 teilgenommen. Ich nehme zum ersten Mal an einem Wettbewerbsprogrammwettbewerb teil.

3 Vollständig, D-Problem wurde durch die Wand der Ausführungszeit blockiert, E wurde ebenfalls implementiert, aber TLE ist bei der Überprüfung jetzt mit unbeschreiblichem Code peinlich ...

A - Alphabet

#Alphabet
S = input()
if S in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
    print('A')
else:
    print('a')

Problem der Rückgabe von Groß- oder Kleinbuchstaben für die Eingabe eines Buchstabens des Alphabets. Ich wünschte, ich könnte nach dem ASCII-Code usw. urteilen, aber ich hatte so etwas noch nie in Python implementiert. Wie Sie sehen, antwortete ich gewaltsam.

B - Mix Juice

#Mix Juice
N, K = list(map(int, input().split()))
P = sorted(map(int, input().split()))
print(sum(P[0:K]))

Der Preis für jede der N Obstsorten wird angegeben, und der niedrigste Preis beim Kauf einer der K Obstsorten wird berechnet. ↓ Sortieren Sie N Preistypen und antworten Sie als Gesamtwert von K vom kleinsten.

C - One Quadrillion and One Dalmatians

#One Quadrillion and One Dalmatians
alphabet = list('abcdefghijklmnopqrstuvwxyz')
N = int(input())-1
 
def shin26(N):
    if(int(N/26)!=0):
        return(shin26(int(N/26)-1)+alphabet[N%26])
    return alphabet[N%26]
 
print(shin26(N))

Eine Frage, die A bis Z, AA bis AZ, BA ~ ... für Eingaben wie die EXCEL-Spaltennummer zurückgibt (die Antwort ist niedriger). Ich habe die rekursive Funktion geändert, um die N-ary-Zahl zu finden, sodass die Zeichenfolgen a bis z zurückgegeben werden. Auch hier kann durch Erstellen einer Liste von a bis z das Alphabet erhalten werden, indem die Adresse der Liste angegeben wird.

Danach lernte ich den Kürzungsteilungsoperator "//" in Python kennen. (Es war nicht notwendig, int und Division Operator zu kombinieren)

D - Replacing

###Fehler###
#Replacing
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
Q = int(input())
 
for i in range(Q):
    B, C = list(map(int, input().split()))
    CC = A==B
    NC = CC==False
    A = A*(NC) + C*CC
    print(A.sum())

D Das Problem konnte nicht rechtzeitig behoben werden. Bei einem Array A besteht das Problem darin, B wiederholt durch C zu ersetzen und jedes Mal den Gesamtwert von A auszugeben. Zuerst habe ich es ehrlich ersetzt, aber es ist gesunken, weil die Ausführungszeit überschritten wurde.

Er riet mir, wenn ich die Anzahl der Bs im Array unmittelbar nach dem Ende wüsste, könnte ich den Unterschied zum vorherigen Gesamtwert feststellen (Danke !!).

###Fehler###
#Replacing
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
Q = int(input())
u, count = np.unique(A,return_counts=True)
asum = A.sum()
for i in range(Q):
    B, C = list(map(int, input().split()))
    if B in u:
        posB = np.where(u==B)
        asum += int(count[posB]) * (C-B)
        # print(u)
        # print(count)
        if not (C in u):
            u[posB] = C
        else :
            posC = np.where(u==C)
            count[posC] += count[posB]
            u = np.delete(u,posB)
            count = np.delete(count,posB)
    print(asum)

Konvertieren Sie Array A in ein Array mit der Anzahl u einer bestimmten Zahl. Beim Wechsel von B nach C wurde die Anzahl geändert, und wenn sie integriert werden konnte, sollte die Richtlinie integriert werden (die Ausgabe wird aus der oben beschriebenen Differenz berechnet), dies sank jedoch ebenfalls.

** Listensuche ist langsam **

Ich wusste……. Es ist langsam, eine for-Anweisung in Python zu drehen (wenn es eine Berechnung gibt, eine for-Anweisung zu drehen, ersetzen Sie sie normalerweise durch eine Matrixoperation und drehen Sie sie durch numpy). Darüber hinaus erlitten Bekannte von C ++ - Benutzern in gleicher Weise eine Überlaufzeit.

Ein Plan zum Erstellen eines B → C-Konvertierungsbaums und zum Anwenden am Ende ↓ Nicht möglich, da für jede Konvertierung eine Ausgabe erforderlich ist.

Schauen Sie sich doch den Kommentar an "Da die Eingabe-Ganzzahl höchstens $ 10 ^ 5 $ beträgt, erstellen Sie ein Array von $ 10 ^ 5 $ und geben Sie die Nummer dieser Nummer in die Adressadresse ein." Dies erfordert sicherlich keine Suche!

Also bekam ich AC mit der folgenden Antwort.

#Replacing
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
Q = int(input())
u, count = np.unique(A,return_counts=True)
L = np.zeros(10**5,int)
for i in range(len(u)):
    L[u[i]-1] = count[i]
asum = A.sum()
for i in range(Q):
    B, C = list(map(int, input().split()))
    asum += L[B-1] * (C-B)
    L[C-1] += L[B-1]
    L[B-1] = 0
    print(asum)

E - Red Scarf

###Fehler###
#Red Scarf
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
output = ''
 
def binary(A, p):
    if not np.all(A==0) :
        return binary( (A-A%2)/2 , p+1 ) + ((A%2).sum())%2 * 2**p
    return ((A%2).sum())%2 * 2**p
 
for i in range(N):
    ken = (np.delete(A,i))
    output += str(int(binary(ken,0)))
    if i != N-1:
        output += ' '
 
print(output)

Ich kannte xor nicht, also habe ich es binär beurteilt. Ende

Ich habe dies getan, weil ich verstanden habe, dass es an der Anzahl von 1s in jeder Ziffer der Binärzahl gemessen werden kann, aber an TLE. Ich habe AC unten von einem Bekannten mit dem Rat bekommen, dass ich xor von allen Zahlen nehmen und dann meine eigene Nummer und xor nehmen könnte.

#Red Scarf
N = int(input())
A = list(map(int, input().split()))
output = list()
 
axor = A[0]
for i in range(1,N):
    axor ^= A[i]
 
for i in range(N):
    output.append(axor^A[i])
print(*output)

Ich habe ein wenig auswendig gelerntes Wissen wie die Append-Methode hinzugefügt.

Zusammenfassung

Das F-Problem bleibt unberührt. Beim nächsten ABC arbeiten wir hart daran, frühere Fragen zu lösen, um eine größere Anzahl vollständiger Antworten zu erreichen. Ich möchte das in dem Artikel geschehen lassen. .. ..

Recommended Posts

[Wettkampfpraxis] Ich habe den AtCoder Beginner Contest 171 ausprobiert
Ich habe At Coder Beginner Selection ausprobiert
AtCoder Anfängerwettbewerb 177
AtCoder Anfängerwettbewerb 179
AtCoder Anfängerwettbewerb 172
AtCoder Anfängerwettbewerb 180
Atcoder Anfänger Wettbewerb 153
AtCoder Anfängerwettbewerb 152 Rückblick
AtCoder Beginner Contest 160 Bewertung
AtCoder Anfängerwettbewerb 178 Bewertung
AtCoder Anfängerwettbewerb 180 Hinweis
AtCoder Anfängerwettbewerb 166 Bewertung
AtCoder Anfängerwettbewerb 182 Hinweis
AtCoder Beginner Contest 164 Bewertung
AtCoder Beginner Contest 181 Bewertung
AtCoder Beginner Contest 171 Bewertung
AtCoder Beginner Contest 182 Bewertung
AtCoder Anfängerwettbewerb 177 Rückblick
AtCoder Anfängerwettbewerb 168 Bewertung
AtCoder Beginner Contest 179 Bewertung
AtCoder Beginner Contest 167 Memorandum
AtCoder Beginner Contest 172 Bewertung
AtCoder Anfängerwettbewerb 183 Hinweis
AtCoder Anfängerwettbewerb 176 Bewertung
AtCoder Anfängerwettbewerb 184 Hinweis
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 Beginner Contest 165 Bewertung
AtCoder Beginner Contest 173 Bewertung
AtCoder Anfängerwettbewerb 155 Bewertung
AtCoder Beginner Contest 162 Bewertung
AtCoder Beginner Contest 181 Teilnahmebericht
AtCoder Beginner Contest 175 Virtueller Eintrag
AtCoder Beginner Contest 161 Teilnahmebericht
AtCoder Beginner Contest 176 Teilnahmebericht
AtCoder Beginner Contest 154 Teilnahmebericht
AtCoder Beginner Contest # 003 Teilnahmehinweis
AtCoder Beginner Contest 166 Teilnahmebericht
AtCoder Beginner Contest 153 Teilnahmebericht
AtCoder Beginner Contest 145 Teilnahmebericht
AtCoder Beginner Contest 184 Teilnahmebericht
AtCoder Beginner Contest 160 Teilnahmebericht
AtCoder Beginner Contest 169 Teilnahmebericht
AtCoder Beginner Contest 178 Teilnahmebericht
AtCoder Beginner Contest 163 Teilnahmebericht
AtCoder Beginner Contest 159 Teilnahmebericht
AtCoder Beginner Contest 164 Teilnahmebericht
AtCoder Beginner Contest 168 Teilnahmebericht
AtCoder Beginner Contest 150 Teilnahmebericht
AtCoder Beginner Contest 158 Teilnahmebericht
AtCoder Beginner Contest 180 Teilnahmebericht
AtCoder Beginner Contest 162 Teilnahmebericht
AtCoder Beginner Contest 157 Teilnahmebericht
AtCoder Beginner Contest 167 Teilnahmebericht