J'ai pris la première place pour la première fois à Bacha! , Banzai! Je veux faire un effort pour l'adapter si bien. D était un moment où j'ai appliqué la solution de base au problème du jeu. (Il y a eu un cas où j'ai oublié d'y penser en disant cela. Je le regrette.)
Prenez simplement la première lettre dans l'ordre.
answerA.py
x=input().split()
print(x[0][0]+x[1][0]+x[2][0])
Compte tenu du plus petit multiple de x au-dessus de a (fonction ceil) et du plus grand multiple de x en dessous de b (fonction de plancher), il est seulement nécessaire de compter le nombre de multiples de x entre les deux nombres (y compris les deux extrémités). Tu peux voir ça. Pour éviter les inexactitudes, j'ai utilisé l'opérateur // cette fois sans utiliser les fonctions ceil ou floor.
answerB.py
a,b,x=map(int,input().split())
A=-((-a)//x)
B=b//x
print(B-A+1)
Il suffit que $ a_i + a_ {i + 1} <= x $ soit valable pour i = 1 à n-1. Ici, afin de minimiser le nombre d'opérations, ** considérez toutes les sommes de deux nombres adjacents **, il est donc préférable de ** le faire goulûment dans l'ordre de l'avant ** (je pense qu'il y a beaucoup de problèmes similaires avec AtCoder) .). Plus précisément, sous $ a_1 $ comme x ou moins, réduisez $ a_ {i + 1} $ de sorte que $ a_i + a_ {i + 1} <= x $ tienne de i = 1 à n-1. Faire. Si cela tient déjà, ne faites rien. Ici, vous pouvez réduire $ a_i $ ou $ a_ {i + 1} $, mais si vous réduisez $ a_ {i + 1} $, $ a_ {i + 1} + a_ {i + 2 Vous pouvez vous attendre à ce que $ a_j + a_ {j + 1} $ soit plus petit dans j> i car} $ sera plus petit. Par conséquent, à partir de là, on peut dire que le nombre minimum d'opérations peut être atteint en le faisant goulûment depuis l'avant.
answerC.py
n,x=map(int,input().split())
a=list(map(int,input().split()))
if a[0]>x:
ans=a[0]-x
a[0]=x
else:
ans=0
for i in range(1,n):
if a[i-1]+a[i]>x:
ans+=(a[i-1]+a[i]-x)
a[i]=x-a[i-1]
print(ans)
C'est un problème de jouer à un jeu avec deux personnes. Il existe deux principales politiques de base pour ces questions. Le premier est ** faites attention à la phase finale du jeu **. Dans la programmation de compétition, il n'est souvent pas possible de tout simuler, il est donc souvent bon de se concentrer sur la phase finale. Le second est ** quelle est la phase du jeu **. Les jeux qui sont résolus par une programmation compétitive sont conçus pour être résolus, et beaucoup d'entre eux peuvent être divisés en plusieurs états. (Dans ce problème, les opérations sont effectuées en alternance, donc ** pair et impair ** sont également des points de contrôle importants.)
La solution est la suivante en considérant les deux points ci-dessus. Tout d'abord, dans la phase finale, vous pouvez voir que soit (1) il ne peut pas être supprimé car il ne reste plus que deux caractères (car il est aux deux extrémités), ou (2) il ne peut pas être supprimé car les mêmes caractères sont côte à côte. De plus, il est important que les caractères aux deux extrémités ** ne puissent jamais être supprimés **. En d'autres termes, les deux caractères restants dans le modèle (1) sont deux caractères aux deux extrémités, et les mêmes caractères adjacents l'un à l'autre dans le modèle (2) sont deux caractères aux deux extrémités (trois caractères au total). Ici, je pensais que la dernière chose qui restait était de deux ou trois caractères, mais ce n'est pas le cas avec des motifs comme abababa, dans lesquels deux types de caractères alternent. Je n'ai pas remarqué jusqu'à ce que j'ai vu la réponse ... La considération est douce. (Puisque le cas est divisé par pair et impair, cela n'a pas affecté le résultat.) Dans tous les cas, le nombre de caractères restants dans le motif (1) est ** pair ** et le nombre de caractères restant dans le motif (2) est ** impair **, donc quand n est pair dans le motif (1), le premier joueur perd et n Quand est impair, la deuxième attaque est perdue, quand n est pair dans le motif (2), la deuxième attaque est perdue et quand n est impair, la première attaque est perdue. (Pour plus de détails, reportez-vous à Answer.)
answerD.py
s=input()
n=len(s)
if s[0]==s[-1]:
if n%2==0:
print("First")
else:
print("Second")
elif s[0]!=s[-1]:
if n%2==1:
print("First")
else:
print("Second")
Recommended Posts