Je suis nouveau dans ce genre de choses, donc je ne sais pas. C'est juste amusant de penser logiquement et de sortir et de confirmer ce que vous avez appris. Pendant que je travaille, je remarque que certaines grandes entreprises informatiques attribuent des scores à AtCoder. En ce sens, il peut être jugé non seulement comme une auto-satisfaction mais aussi objectivement. En ce moment, je résous dans l'ordre à partir de ici "Que faire après vous être inscrit auprès d'AtCoder-Si vous résolvez cela, vous pouvez vous battre assez! 10 questions passées-".
[Résumé du problème] Il y avait un total de billets de 10000 yens NN, de 5000 yens et de 1000 yens, et le montant total était de YY yens. Trouvez un ensemble du nombre de factures pour chaque montant qui remplit ces conditions. Si une telle situation ne peut pas exister, sortie -1 -1 -1.
[Restrictions]
1≤N≤2000 1000≤Y≤2∗107 N est un entier Y est multiple de 1000
Tout d'abord, avez-vous écrit la partie qui doit être considérée comme un commentaire? C'est. Mais je suis content de l'avoir lu après l'avoir résolu. J'ai été accro à l'entraînement musculaire ces derniers temps, alors j'ai essayé de le pousser avec le jeu de puissance. Je pense qu'une solution absolue sortira s'il n'y a pas de limite de temps, mais j'ai plutôt dû réfléchir à la manière de l'optimiser. C'est la même chose que la probabilité et l'ordre que j'ai fait quand j'étais au lycée, et il faut du temps pour les trouver tous. Donc, 10 000 yens et 5 000 yens Si vous remarquez que le nombre de billets de 1000 yens est automatiquement fixé si vous connaissez le nombre de, ce problème semble être OK
from sys import stdin
N,Y = [int(x) for x in stdin.readline().rstrip().split()]
a = -1
b = -1
c = -1
for i in range(N+1):
for j in range(N-i+1):
if i+j+(N-i-j) == N and Y == 10000*i + 5000*j + 1000*(N-i-j):
a = i
b = j
c = (N-i-j)
break
print(str(a)+' '+str(b)+' '+str(c))
Même avec cela, la bonne réponse était correcte, mais je regrette que nous devions faire des efforts pour augmenter la vitesse de traitement et réduire la taille. Je voulais aussi me souvenir du format. Ce que j'ai appris cette fois ・ -Méthode d'entrée dans la programmation de compétition -Optimisation de la combinaison
est! Si vous utilisez votre tête et faites quelque chose qui n'est ni ah ni ceci, le sentiment d'accomplissement est incroyable. Le tabac est délicieux. Quand je ne savais rien de la programmation de compétition, je mettais les données d'entrée dans une liste, je les retirais à chaque fois, je les mettais dans une variable, etc., donc c'était un code redondant. Je voulais le saisir proprement cette fois, alors j'ai essayé d'utiliser la notation d'inclusion de liste et le module stdin!
La combinaison est comme ci-dessus! Ce n'est que le début, mais est-ce que la programmation d'une série d'applications des connaissances de base tant que vous avez un concept de base? ?? ?? Si vous vous souvenez du module à chaque fois, vous pouvez le faire de plus en plus, non? ?? ?? La fille à l'intérieur de moi se fait remarquer. Je veux faire de plus en plus avec un esprit invincible. Veuillez excuser ma pauvre écriture.
Recommended Posts