Examen de AtCoder Beginner Contest 160, jusqu'à la question E (Python)

Ceci est un article de synthèse pour les débutants des professionnels de la compétition.

La solution que j'écris ici est écrite en regardant les commentaires et les soumissions d'autres personnes. Ce n'est peut-être pas ce que vous avez réellement soumis.

A - Coffee C'est un problème de déterminer si les 3ème et 4ème caractères d'une chaîne de caractères donnée sont les mêmes, et les 5ème et 6ème caractères sont les mêmes.

Le code suivant est implémenté tel quel. C'est acceptable.

s = input()
if s[2] == s[3] and s[4] == s[5]:
  print('Yes')
else: print('No')

B - Golden Coins Si vous échangez le montant d'argent donné n et le convertissez en 1000 pour chaque boule de 500 yens et 5 pour chaque boule de 5 yens, quelle est la valeur maximale? C'est le problème.

Le nombre de balles de 500 yens est «n // 500», et le nombre de balles de 5 yens est «n% 500 // 5».

Je l'ai implémenté comme suit.

n = int(input())
print(n//500*1000 + n%500//5*5)

C - Traveling Salesman around Lake Compte tenu de la localisation des maisons qui existent autour du lac, il s'agit de considérer la distance à parcourir pour faire le tour de toutes les maisons sur le trajet le plus court.

La position de l'extrémité nord du lac a été fixée à 0, et les positions des maisons ont été stockées dans le réseau pendant deux tours dans le sens des aiguilles d'une montre à partir de là. En partant de l'une des maisons du premier tour, nous avons calculé la distance pour faire le tour de toutes les maisons et calculé la valeur maximale.

K, N = map(int, input().split())
A = list(map(int, input().split()))
A += [a+K for a in A]
minD = 1e6
for n in range(N):
  minD = min(minD, A[n+N-1] - A[n])
print(minD)

La manière d'écrire était différente dans le commentaire. Le lac en fait presque tout sauf une partie. La partie qui ne passe pas se situe entre les maisons les plus éloignées.

Je l'ai un peu réécrit. C'est plus beau.

K, N = map(int, input().split())
A = list(map(int, input().split()))
A.append(A[0]+K)
maxD = 0
for n in range(N+1):
  maxD = max(maxD, A[n+1] - A[n])
print(K-maxD)

Postscript: python peut prendre un index négatif comme li [-1], il n'est donc pas nécessaire d'augmenter le tableau.

D - Line++

C'est un problème d'obtenir la distribution de la longueur de chemin la plus courte à partir d'un graphique donné.

Il existe une bibliothèque appelée networkx qui peut gérer la théorie des graphes en python. C'est une bibliothèque très pratique qui peut obtenir chaque paramètre à partir de la création d'un graphe. Calculons maintenant la distribution.

import networkx as nx

N, X, Y = map(int, input().split())
X -= 1
Y -= 1
out = [0] * N

G = nx.Graph()
G.add_nodes_from(list(range(N)))
G.add_edges_from([(i, i+1) for i in range(N-1)] + [(X, Y)])
for i in range(N-1):
  for j in range(i+1, N):
    out[nx.shortest_path_length(G, i, j)] += 1
for i in range(1, N):
  print(out[i])

Eh bien, je ne peux pas utiliser cette bibliothèque avec atcoder.

Je ne pouvais pas du tout étudier l'exploration de graphes, alors j'ai abandonné et suis passé au problème suivant.

J'ai vu le commentaire. Ce problème ne semble pas nécessiter de recherche difficile. Il n'y a que deux choix pour la distance du point A au point B: BA (en procédant un par un) ou ʻabs (AX) + 1 + abs (BY)` (en passant par le raccourci de XY). Il n'y en a pas. Le plus court de ces deux est l'itinéraire le plus court.

Ainsi, le code suivant est une réécriture du code ci-dessus uniquement pour la méthode de recherche d'itinéraire la plus courte.

N, X, Y = map(int, input().split())
X -= 1
Y -= 1
out = [0] * N
for i in range(N-1):
  for j in range(i+1, N):
    out[min(j-i, abs(i-X)+1+abs(j-Y))] += 1
for i in range(1, N):
  print(out[i])

Je suis passé par là.

E - Red and Green Apples Vous recevrez une pomme rouge avec un délicieux $ p_i $, une pomme verte avec un délicieux $ q_i $ et une pomme incolore avec un délicieux $ r_i $. C'est un problème de trouver le goût maximum en mangeant X pommes rouges et Y pommes vertes. La clé est de savoir comment gérer les pommes incolores.

Prenez X des pommes rouges par ordre de délicatesse et Y des pommes vertes par ordre de délicatesse. Tout ce que vous avez à faire est de remplacer les pommes X + Y par celles qui ne sont pas délicieuses avec des pommes incolores.

X, Y, A, B, C = map(int, input().split())
P = list(map(int, input().split()))
Q = list(map(int, input().split()))
R = list(map(int, input().split()))
P.sort()
Q.sort()
R.sort()

out = P[-X:] + Q[-Y:]

out.sort()
for i in range(min(C, X+Y)):
  if R[-i-1] > out[i]:
    out[i] = R[-i-1]
  else:
    break
print(sum(out))

Avec cela, j'ai pu le résoudre avec une marge dans le temps de calcul.

C'est tout pour cet article.

Recommended Posts

Examen du concours AtCoder pour débutants 159, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 163, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 162, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 154, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 153, jusqu'à la question E (Python)
Examen de AtCoder Beginner Contest 160, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 167, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 157, jusqu'à la question E (Python)
Examen du concours AtCoder pour débutants 161, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 155, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 156, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 166, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 165, jusqu'à la question E (Python)
Examen de atcoder ABC158, jusqu'à la question E (Python)
AtCoder Beginner Contest 102 Revue des questions précédentes
AtCoder Beginner Contest 072 Revue des questions précédentes
AtCoder Beginner Contest 085 Revue des questions précédentes
AtCoder Beginner Contest 062 Revue des questions précédentes
AtCoder Beginner Contest 113 Revue des questions précédentes
AtCoder Beginner Contest 074 Revue des questions précédentes
AtCoder Beginner Contest 051 Revue des questions précédentes
AtCoder Beginner Contest 127 Revue des questions précédentes
AtCoder Beginner Contest 119 Revue des questions précédentes
AtCoder Beginner Contest 151 Revue des questions précédentes
AtCoder Beginner Contest 075 Revue des questions précédentes
AtCoder Beginner Contest 054 Revue des questions précédentes
AtCoder Beginner Contest 110 Revue des questions précédentes
AtCoder Beginner Contest 117 Revue des questions précédentes
AtCoder Beginner Contest 070 Revue des questions précédentes
AtCoder Beginner Contest 112 Revue des questions précédentes
AtCoder Beginner Contest 076 Revue des questions précédentes
AtCoder Beginner Contest 089 Revue des questions précédentes
AtCoder Beginner Contest 069 Revue des questions précédentes
AtCoder Beginner Contest 079 Revue des questions précédentes
AtCoder Beginner Contest 067 Revue des questions précédentes
AtCoder Beginner Contest 093 Revue des questions précédentes
AtCoder Beginner Contest 046 Revue des questions précédentes
AtCoder Beginner Contest 123 Revue des questions précédentes
AtCoder Beginner Contest 049 Revue des questions précédentes
AtCoder Beginner Contest 078 Revue des questions précédentes
AtCoder Beginner Contest 081 Revue des questions précédentes
AtCoder Beginner Contest 047 Revue des questions précédentes
AtCoder Beginner Contest 060 Revue des questions précédentes
AtCoder Beginner Contest 104 Revue des questions précédentes
AtCoder Beginner Contest 057 Revue des questions précédentes
AtCoder Beginner Contest 126 Revue des questions précédentes
AtCoder Beginner Contest 090 Revue des questions précédentes
AtCoder Beginner Contest 103 Revue des questions précédentes
AtCoder Beginner Contest 061 Revue des questions précédentes
AtCoder Beginner Contest 059 Revue des questions précédentes
AtCoder Beginner Contest 044 Revue des questions précédentes
AtCoder Beginner Contest 083 Revue des questions précédentes
AtCoder Beginner Contest 048 Revue des questions précédentes
AtCoder Beginner Contest 124 Revue des questions précédentes
AtCoder Beginner Contest 116 Revue des questions précédentes
AtCoder Beginner Contest 097 Revue des questions précédentes
AtCoder Beginner Contest 088 Revue des questions précédentes
AtCoder Beginner Contest 053 Revue des questions précédentes
AtCoder Beginner Contest 094 Revue des questions précédentes
AtCoder Beginner Contest 107 Revue des questions précédentes
Concours pour débutants AtCoder: Réponses aux problèmes D Python