Frühere Fragen zum ersten Mal gelöst
Obere Funktion zum Kapitalisieren
answerA.py
s1,s2,s3=input().split()
s=s1[0]+s2[0]+s3[0]
print(s.upper())
Einfach vergleichen
answerB.py
a=int(input())
b=int(input())
if a>b:
print("GREATER")
elif a<b:
print("LESS")
else:
print("EQUAL")
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))
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