[PYTHON] AtCoder Beginner Contest 081 Rückblick auf frühere Fragen

Benötigte Zeit

スクリーンショット 2020-03-26 15.07.42.png

Impressionen

Ich habe das D-Problem zweimal hintereinander richtig gelöst. Ich konnte es lösen, während ich es sorgfältig überlegte, aber bevor ich es wusste, löste ich es, während ich FX machte ... Ich habe das Gefühl, dass ich mich nicht mit der Zukunft verbinden kann, wenn ich mich nicht beherrsche, mich während des Bachacons konzentriere und die Regeln genau befolge.

Problem A

Zählen Sie, wie viele Einsen es gibt. Anfangs habe ich find statt count verwendet. Warum verstehst du nicht einmal die Grundfunktionen ...

answerA.py


print(input().count("1"))

B-Problem

Hmm, schreib einfach. Überlegen Sie, ob alle Elemente durch 2 teilbar sind. Es scheint eine prägnantere Schreibweise zu geben. (← Ich habe es hinzugefügt, weil ich einen Kommentar erhalten habe.)

answerB.py


n=int(input())
a=list(map(int,input().split()))
ans=0
def check_all():
    global a,n
    for i in range(n):
        if a[i]%2!=0:
            return False
    return True
while check_all():
    ans+=1
    for i in range(n):
        a[i]//=2
print(ans)

Nachtrag (27.03.2020)

Ich habe die beiden Arten von Lösungen, die ich erhalten habe, in den Kommentaren veröffentlicht. Dies ist das erste Mal, dass ich die Funktion all verwendet habe, daher möchte ich sie von nun an verwenden.

answerB_better.py


n=int(input())
a=list(map(int,input().split()))

ans=0
while all(i%2==0 for i in a):
    ans+=1
    for j in range(n):
        a[j]//=2
print(ans)

answerB_better.py


from functools import reduce
from fractions import gcd
n=int(input())
a=list(map(int,input().split()))
x=reduce(gcd,a)

ans=0
while x%2==0:
    ans+=1
    x//=2
print(ans)

C-Problem

Ich möchte die Anzahl der Bälle reduzieren, die neu geschrieben werden sollen, dh ich möchte nicht die Bälle mit vielen Bällen mit derselben Anzahl neu schreiben. Nachdem Sie also die gleiche Anzahl von Bällen nebeneinander sortiert und platziert haben, gruppieren Sie sie mit der Gruppe nach Funktion. Sortieren Sie nach der Gruppierung in absteigender Reihenfolge nach der Anzahl der Bälle und schreiben Sie alle Bälle in der k + 1. und den nachfolgenden Gruppen (mit 1-Index) neu.

answerC.py


n,k=map(int,input().split())
a=sorted(list(map(int,input().split())))
def groupby():
    global a
    a2=[[a[0],1]]
    for i in range(1,len(a)):
        if a2[-1][0]==a[i]:
            a2[-1][1]+=1
        else:
            a2.append([a[i],1])
    return a2
b=groupby()
b.sort(key=lambda x:x[1],reverse=True)
l=len(b)
ans=0
for i in range(k,l):
    ans+=b[i][1]
print(ans)

D Problem

Zuallererst bedeutet dies, dass Sie innerhalb von 2N-Zeiten frei entscheiden können. Suchen Sie also nach einer bequemen Methode. Betrachten Sie zunächst den Fall, in dem alle Elemente 0 oder mehr sind. In diesem Fall können Sie einfach eine Zahlenfolge erstellen, die die Bedingung erfüllt, indem Sie ** das Element rechts in der Reihenfolge von links ** (bis zu n-1 Mal) ($ a_1, a_1) hinzufügen. + a_2,…, a_1 + a_2 +… + a_ {n-1} + a_n $.) Da es hier jedoch negative Zahlen gibt, kann diese Methode die Bedingungen nicht erfüllen. Daher wird im Gegenteil angenommen, dass alle Elemente 0 oder weniger sind. In diesem Fall können Sie sehen, dass ** Sie den umgekehrten Vorgang ausführen können ** (bis zu n-1 Mal). Aus der obigen Überlegung ist es möglich, eine Zahlenfolge zu erstellen, die die Bedingung erfüllt, wenn das Muster entweder "alle Elemente sind 0 oder mehr" oder "alle Elemente sind 0 oder weniger" ist. Erwägen Sie daher, ein solches Muster innerhalb von ** n + 1 Mal ** zu erstellen. Um ein solches Muster zu erstellen, haben wir uns auf die Zahl mit dem maximalen Absolutwert konzentriert. Wenn diese Zahl negativ ist, können Sie sie zu allen anderen Elementen hinzufügen, um alle anderen Elemente negativ zu machen. Wenn sie positiv ist, können Sie alle anderen Elemente positiv machen (bis zu n-1). Mal). Führen Sie die beiden oben genannten Vorgänge aus, um Folgendes zu erhalten.

answerD.py


n=int(input())
a=list(map(int,input().split()))
c,d=min(a),max(a)
ans=[]
if abs(c)>abs(d):
    c_=a.index(c)
    for i in range(n):
        if i!=c_ and a[i]>0:
            ans.append(str(c_+1)+" "+str(i+1))
    for i in range(n-1,0,-1):
        ans.append(str(i+1)+" "+str(i))
else:
    d_=a.index(d)
    for i in range(n):
        if i!=d_ and a[i]<0:
            ans.append(str(d_+1)+" "+str(i+1))
    for i in range(n-1):
        ans.append(str(i+1)+" "+str(i+2))
l=len(ans)
print(l)
for i in range(l):
    print(ans[i])

Recommended Posts

AtCoder Beginner Contest 102 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 062 Rückblick auf frühere Fragen
AtCoder Beginner Contest 113 Rückblick auf frühere Fragen
AtCoder Beginner Contest 074 Rückblick auf frühere Fragen
AtCoder Beginner Contest 051 Rückblick auf frühere Fragen
AtCoder Beginner Contest 119 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen
AtCoder Beginner Contest 117 Rückblick auf frühere Fragen
AtCoder Beginner Contest 070 Rückblick auf frühere Fragen
AtCoder Beginner Contest 105 Rückblick auf frühere Fragen
AtCoder Beginner Contest 112 Rückblick auf frühere Fragen
AtCoder Beginner Contest 076 Rückblick auf frühere Fragen
AtCoder Beginner Contest 089 Rückblick auf frühere Fragen
AtCoder Beginner Contest 069 Rückblick auf frühere Fragen
AtCoder Beginner Contest 079 Rückblick auf frühere Fragen
AtCoder Beginner Contest 056 Rückblick auf frühere Fragen
AtCoder Beginner Contest 087 Rückblick auf frühere Fragen
AtCoder Beginner Contest 093 Rückblick auf frühere Fragen
AtCoder Beginner Contest 046 Rückblick auf frühere Fragen
AtCoder Beginner Contest 123 Überprüfung früherer Fragen
AtCoder Beginner Contest 049 Rückblick auf frühere Fragen
AtCoder Beginner Contest 078 Rückblick auf frühere Fragen
AtCoder Beginner Contest 081 Rückblick auf frühere Fragen
AtCoder Beginner Contest 047 Rückblick auf frühere Fragen
AtCoder Beginner Contest 060 Rückblick auf frühere Fragen
AtCoder Beginner Contest 104 Rückblick auf frühere Fragen
AtCoder Beginner Contest 057 Rückblick auf frühere Fragen
AtCoder Beginner Contest 121 Rückblick auf frühere Fragen
AtCoder Beginner Contest 126 Rückblick auf frühere Fragen
AtCoder Beginner Contest 090 Rückblick auf frühere Fragen
AtCoder Beginner Contest 103 Rückblick auf frühere Fragen
AtCoder Beginner Contest 061 Rückblick auf frühere Fragen
AtCoder Beginner Contest 059 Rückblick auf frühere Fragen
AtCoder Beginner Contest 044 Rückblick auf frühere Fragen
AtCoder Beginner Contest 083 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen
AtCoder Beginner Contest 124 Rückblick auf frühere Fragen
AtCoder Beginner Contest 116 Rückblick auf frühere Fragen
AtCoder Beginner Contest 097 Rückblick auf frühere Fragen
AtCoder Beginner Contest 088 Rückblick auf frühere Fragen
AtCoder Beginner Contest 092 Rückblick auf frühere Fragen
AtCoder Beginner Contest 099 Rückblick auf frühere Fragen
AtCoder Beginner Contest 065 Rückblick auf frühere Fragen
AtCoder Beginner Contest 053 Rückblick auf frühere Fragen
AtCoder Beginner Contest 094 Rückblick auf frühere Fragen
AtCoder Beginner Contest 063 Rückblick auf frühere Fragen
AtCoder Beginner Contest 107 Rückblick auf frühere Fragen
AtCoder Beginner Contest 071 Rückblick auf frühere Fragen
AtCoder Beginner Contest 064 Rückblick auf frühere Fragen
AtCoder Beginner Contest 082 Rückblick auf frühere Fragen
AtCoder Beginner Contest 084 Rückblick auf frühere Fragen
AtCoder Beginner Contest 068 Rückblick auf frühere Fragen
AtCoder Beginner Contest 043 Rückblick auf frühere Fragen
AtCoder Beginner Contest 098 Rückblick auf frühere Fragen
AtCoder Beginner Contest 114 Rückblick auf frühere Fragen
AtCoder Beginner Contest 045 Rückblick auf frühere Fragen