Je l'ai encore mal lu comme je l'ai fait la dernière fois. Voir le problème C pour plus de détails. Il est inefficace de ne résoudre que 3 questions en 2 heures, nous allons donc augmenter progressivement le nombre de problèmes pouvant être résolus.
Si la sous-chaîne commune la plus courte de $ a $ et $ b $ existe, la longueur sera de 1, vous pouvez donc afficher l'un des caractères communs de $ a $ et $ b $. Ici aussi, vous pouvez savoir s'il y a des caractères contenus dans $ a $ qui sont également contenus dans $ b $, et si l'un d'eux a une structure définie, vous pouvez vérifier avec $ O (N) $.
A.py
t=int(input())
for _ in range(t):
n,m=map(int,input().split())
a=list(map(int,input().split()))
b=set(map(int,input().split()))
for i in a:
if i in b:
print("YES")
print(f"1 {i}")
break
else:
print("NO")
Tout d'abord, c'est un problème de jeu, alors ** faites attention à l'état final **. Lorsque vous faites attention à l'état final, toutes les montagnes seront à 0, mais juste avant cela, seule la dernière montagne restera telle quelle.
L'accent était mis ici sur le fait de quitter ou non chaque montagne (** binarisation! **). Autrement dit, si le nombre de pierres dans chaque montagne est supérieur à 1, le joueur qui choisit cette montagne ne peut pas donner le choix à l'adversaire. Cela peut être fait en ne laissant qu'une pierre de la montagne et en la remettant à l'autre partie.
Cependant, ** si le nombre de pierres dans la montagne est à l'origine d'un **, le joueur qui choisit la montagne n'a pas d'autre choix que de retirer cette pierre. Par conséquent, lorsque vous travaillez sur une montagne avec plus d'une pierre, vous pouvez choisir de laisser une pierre ou d'enlever toutes les pierres de cette montagne selon que le nombre de pierres dans la montagne suivante est un ou non. De plus, si une montagne avec une seule pierre continue à partir de la première montagne, le joueur n'a pas le choix, donc le joueur qui peut choisir une montagne sans pierre pour la première fois a le choix et gagne. On peut dire que c'est possible
B.py
t=int(input())
for i in range(t):
n=int(input())
a=list(map(int,input().split()))
s=["First","Second"]
ans=0
for i in range(n):
if a[i]!=1:
ans=i
break
else:
ans=n-1
print(s[ans%2])
Je l'ai complètement mal lu. Je pensais que l'opération d'inversion était la chaîne de caractères entière, mais elle a été écrite lorsque je voyais souvent l'énoncé du problème si je ne le faisais qu'avec le préfixe que j'ai choisi. Dans Codeforces, j'ai lu le texte anglais original tel qu'il est, et il y a beaucoup d'erreurs, je voudrais donc me concentrer sur ** l'élimination de ces erreurs non essentielles **.
Quant au problème, la première politique devrait être de considérer ce qui arrive au $ i $ ème bit (** abstraction **). À ce stade, considérons le cas de l'inversion uniquement du $ i $ ème bit, mais ici c'est possible en sélectionnant dans l'ordre $ i $ → $ 1 $ → $ i $. En outre, dans cette simulation, ce sera environ 3n $ fois. La première opération $ i $ change l'élément $ i $ th en l'élément $ 1 $ th, de sorte que l'opération $ 1 $ retourne uniquement l'élément $ i $ th d'origine à cet élément $ 1 $ th, et finalement $ Pensez-y comme une annulation avec i $. Si vous ne savez pas, je pense que vous devriez le montrer. Je pense que de tels problèmes ne peuvent être résolus que de manière découvrable, donc je pense que l'important est ** la familiarité et l'expérimentation **.
C1.py
#erreur de lecture…
t=int(input())
for _ in range(t):
n,a,b=int(input()),input(),input()
ans=[]
for i in range(n):
if a[i]!=b[i]:
ans.append(f"{i+1}")
ans.append("1")
ans.append(f"{i+1}")
print(f"{len(ans)}"+" "+" ".join(ans))
Je vais sauter cette fois
Recommended Posts