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

Frühere Fragen zum ersten Mal gelöst

Benötigte Zeit

スクリーンショット 2020-01-08 8.31.20.png

Problem A

Obere Funktion zum Kapitalisieren

answerA.py


s1,s2,s3=input().split()
s=s1[0]+s2[0]+s3[0]
print(s.upper())

B-Problem

Einfach vergleichen

answerB.py


a=int(input())
b=int(input())
if a>b:
    print("GREATER")
elif a<b:
    print("LESS")
else:
    print("EQUAL")

C-Problem

Es ist am besten, dieses ** Problem zu lösen, das für jedes i gilt und das i + 1 und höher von i ** abhängt (Stimmt es? Ich kann es zeigen, wenn ich mit der Absurditätsmethode mein Bestes gebe). Sie können dafür sorgen, dass jeder Term ein anderes Vorzeichen hat. Entweder ist der ungerade Term positiv und der gerade Term negativ, oder der ungerade Term ist negativ und der gerade Term ist positiv. Wenn jedes dieser beiden Muster betrachtet wird, ist es außerdem erforderlich, unterschiedliche Codes zu verwenden, wenn jeder Term das Muster nicht erfüllt, und die minimale Häufigkeit, die zum Ändern des Terms erforderlich ist, wird auf -1 oder 1 gesetzt. Sie können sehen, dass es erreicht werden kann. Außerdem ist es zu diesem Zeitpunkt leicht zu zeigen, dass es nicht notwendig ist, auf -2 oder 2 usw. zu wechseln, wenn Sie über den Fall einer solchen Änderung nachdenken (ich werde es hier weglassen, aber bitte kommentieren Sie es gegebenenfalls). Machen.). Sobald Sie dies wissen, können Sie die Antwort finden, indem Sie in der Reihenfolge des vorherigen Abschnitts nachdenken. (Da wir die Summe betrachten, haben wir zuerst die kumulative Summe berechnet.)

answerC.py


import copy
n=int(input())
a1=[int(i) for i in input().split()]
a2=copy.deepcopy(a1)
#Ich suche eine kumulative Summe
for i in range(1,n):
    a1[i]+=a1[i-1]
for i in range(1,n):
    a2[i]+=a2[i-1]

#Uhr an diesem Punkt+Oder-Notieren Sie, wie viel Sie tun, und c zeichnet auf, wie oft
#Für 1 ist der gerade Term positiv und für 2 ist der ungerade Term positiv(0 Ursprung)
pm1,c1=0,0
pm2,c2=0,0

for i in range(n):
    a1[i]+=pm1
    if i%2==1:
        if a1[i]>=0:
            pm1-=(a1[i]+1)
            c1+=(a1[i]+1)
    else:
        if a1[i]<=0:
            pm1+=(-a1[i]+1)
            c1+=(-a1[i]+1)

for i in range(n):
    a2[i]+=pm2
    if i%2==0:
        if a2[i]>=0:
            pm2-=(a2[i]+1)
            c2+=(a2[i]+1)
    else:
        if a2[i]<=0:
            pm2+=(-a2[i]+1)
            c2+=(-a2[i]+1)

print(min(c1,c2))

D Problem

Ich möchte in der Lage sein, diese Art von Problem zu lösen, was wahnsinnig frustrierend ist. Zunächst mussten wir bedenken, dass diese ** Spielprobleme oft einfacher sind, wenn Sie über die endgültige Form nachdenken **. Ich dachte jedoch an den Fall, die Problemstellung falsch zu lesen und ** optimal zu handeln , um sie immer zu maximieren (der Code von `` `answerD_wrong.py```), aber dies ist überhaupt nicht optimal. tat. Zu diesem Zeitpunkt kam mir die Idee, dass die beiden Berge so nah wie möglich sein sollten, aber ich war mir nicht sicher, weil ich versuchte, es tatsächlich zu simulieren. Wenn Sie jedoch so nah wie möglich graben, ist es leicht zu erkennen, dass es Menschen gibt, die nicht einmal versuchen können, näher zu kommen. Mit anderen Worten, wenn der Unterschied zwischen den beiden Bergen 1 oder weniger beträgt, müssen Sie ihn ** 2 oder mehr aus der Bedingung machen, dass ** i 1 oder mehr ist (von einem bis zwei Steinen zum anderen Berg). Selbst wenn Sie einen hinzufügen, ändert sich der Unterschied zwischen den Steinen um drei. Umgekehrt erhält die andere Person die Differenz zwischen den beiden Peaks, wenn sie 2 oder mehr beträgt. Wenn sie also entsprechend angepasst wird, kann sie übergeben werden, wenn die Differenz zwischen den beiden Peaks 1 oder weniger beträgt. Mit anderen Worten, es ist ersichtlich, dass die Zusammensetzung von ** Personen mit einem Unterschied zwischen zwei Bergen von 1 oder weniger ** und ** Personen mit einem Unterschied zwischen zwei Bergen von 2 oder mehr ** in keiner Weise zusammenbricht. Daher muss nur berücksichtigt werden, wie groß der Unterschied zwischen den beiden Peaks im Ausgangszustand sein wird. Diese Hypothese kann auch durch ** die endgültige Form des Verlustes ** gestützt werden. Dies liegt daran, dass die endgültige Form des Verlusts (0,0), (0,1), (1,0), (1,1) ist, sodass die Differenz zwischen den beiden Peaks kleiner oder gleich 1 ist. Mit anderen Worten, eine Person, die einen Unterschied zwischen zwei Bergen von 2 oder mehr erhält, hat definitiv den Berg des Gegners in Form eines Verlusts, indem sie den Unterschied zwischen den beiden Bergen 1 oder weniger macht ( optimal ). Ich weiß, dass ich gehen kann. Aus der obigen Überlegung gewinnt Alice, wenn der Unterschied zwischen den beiden Bergen im Ausgangszustand 2 oder mehr beträgt, und wenn er 1 oder weniger beträgt, gewinnt Brown. ( Experiment ist wichtig! **)

answerD_right.py


x,y=map(int,input().split())
print("Alice" if abs(x-y)>1 else "Brown")

answerD_wrong.py


def next_tup(x,y):
    if x==0 or x==1:#
        x,y=y,x
    k=x//2
    x-=2*k
    y+=k
    return (x,y)

def defeat(tup):
    return tup==(1,1) or tup==(0,1) or tup==(1,0) or tup==(0,0)

X,Y=map(int,input().split())
if defeat((X,Y)):
    print("Brown")
else:
    ans=[]
    x_sub1,y_sub1=X,Y
    f1=0
    while True:
        z=next_tup(x_sub1,y_sub1)
        if defeat(z):
            break
        else:
            x_sub1,y_sub1=z
            if f1==0:
                f1=1
            else:
                f1=0
    ans.append(f1)
    x_sub2,y_sub2=Y,X
    f2=0
    while True:
        z=next_tup(x_sub2,y_sub2)
        if defeat(z):
            break
        else:
            x_sub2,y_sub2=z
            if f2==0:
                f2=1
            else:
                f2=0
    ans.append(f2)
    if 0 in ans:
        print("Alice")
    else:
        print("Brown")

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 047 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 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
AtCoder Beginner Contest 120 Rückblick auf frühere Fragen
AtCoder Beginner Contest 108 Rückblick auf frühere Fragen
AtCoder Beginner Contest 106 Rückblick auf frühere Fragen