Ceci est mon premier message posté. Je vous remercie. Je vais résumer l'examen d'ABC155 qui a été fait hier dans la pratique.
Pour le nombre de triplets, lorsque deux sont égaux et que l'autre est différent, le triplet est dit «pauvre». Étant donné les trois entiers A, B et C, écrivez Oui si vous vous sentez désolé pour ce triplet, ou Non si vous ne le faites pas.
a = set(map(int, input().split()))
if len(a) == 2:
print("Yes")
else:
print("No")
Vous pouvez juger si vous êtes désolé ou non en regardant le nombre d'éléments à l'aide de set set ().
Vous êtes agent d'immigration au Royaume d'AtCoder. Les documents d'immigration contiennent plusieurs nombres entiers et votre travail consiste à déterminer s'ils remplissent les conditions. Les conditions générales exigent que l'inscription soit approuvée lorsque et seulement lorsque les conditions suivantes sont remplies: Tous les entiers écrits sur le document qui sont pairs sont divisibles par 3 ou 5. Lorsque vous suivez les règles ci-dessus, imprimez APPROUVÉ si vous approuvez les immigrants avec N entiers A1, A2,…, AN dans le document, sinon imprimez REFUSÉ.
N = int(input())
A = list(map(int, input().split()))
flag = 0
for i in range(N):
if A[i] % 2 == 0:
if A[i] % 3 == 0 or A[i] % 5 == 0:
pass
else:
flag = 1
break
if flag == 0:
print("APPROVED")
else:
print("DENIED")
S'il y a un nombre pair qui n'est pas divisible par 3 ou 5, réécrivez l'indicateur et cassez-le. Enfin, il sort en fonction de la valeur de flag.
Il existe N feuilles de vote, et la chaîne $ S_i $ est écrite sur la feuille $ i \ (1 ≤ i ≤ N) $. Sortez toutes les chaînes de caractères qui ont été écrites le plus souvent dans l'ordre croissant dans l'ordre lexical.
Tout d'abord, j'ai créé un dict et mis un caractère en clé et le nombre d'occurrences en valeur. .. .. TLE. J'avais le sentiment qu'il n'y avait qu'un drapeau qui ne fonctionnait pas aujourd'hui.
N = int(input())
dic = {}
for i in range(N):
s = str(input())
if not s in dic:
dic[s] = 1
else:
dic[s] += 1
max_k_list = [kv[0] for kv in dic.items() if kv[1] == max(dic.values())]
max_k_list = sorted(max_k_list)
for i in max_k_list:
print(i)
~~ La raison de TLE ici est probablement que la première instruction for et la suivante sinon s dans dic: sont calculées pour être proches de $ O (N ^ 2) $. ~~ (Sinon, veuillez commenter) max_k_list = [kv[0] for kv in dic.items() if kv[1] == max(dic.values())] C'était $ O (N ^ 2) $ en obtenant la valeur maximale dans l'instruction for à chaque fois. Puisque la valeur maximale ne change pas, vous pouvez éliminer les calculs inutiles en les sortant de la boucle et vous pouvez en faire $ O (N) $. (J'oubliais que j'avais changé ça au moment de ca ...) ~~ Enfin, c'était une bonne idée d'utiliser le module collections. ~~
import collections
N = int(input())
a = []
for i in range(N):
a.append(str(input()))
a = collections.Counter(a)
b = max(a.values())
max_k_list = [kv[0] for kv in a.items() if kv[1] == b]
max_k_list = sorted(max_k_list)
for i in max_k_list:
print(i)
Cette fois, c'était le 3 complet d'ABC, donc je n'ai pu le résoudre que jusqu'à présent. En guise de réflexion, je ne pouvais pas commencer à 9 heures parce que je jouais au jeu. La vitesse de réponse était extrêmement lente en raison de l'oubli de trier ou de l'exécution de TLE inutile dans le problème C. Surtout aujourd'hui, D était très difficile, donc j'ai dû résoudre jusqu'à C rapidement. Après cela, il faut simplement prendre l'habitude de le résoudre régulièrement. .. (Je n'arrive pas à le faire)
J'ai essayé de l'implémenter en regardant l'explication de Youtube. Je n'ai pas remarqué qu'il pouvait être résolu en 2 minutes de recherche. Je me demande s'il est nécessaire de s'habituer à ce domaine.
n, K = map(int, input().split())
a = sorted(list(map(int, input().split())))
inf = 10**18 + 1
l = -1 * inf
r = inf
while(l + 1 < r):
c = (l + r)//2
count = 0
for i in range(n):
#a[i]Classement des cas par le signe de
#a[i] <S'il y a un k qui vaut 0, il y a un k<Si j, alors a[i]*a[j]Est inférieur à une certaine valeur x.
if a[i] < 0:
start = -1 #OUT
end = n #OK
while start + 1 < end:
mid = (start + end) //2
if a[i] * a[mid] < c:
end = mid
else:
start = mid
count += (n-end)
if start < i:
count -= 1
else:#a[i]Le signe de étant inversé, l'opération opposée à la précédente peut être effectuée.
start = -1 #OK
end = n #OUT
while start + 1 < end:
mid = (start + end)//2
if a[i] * a[mid] < c:
start = mid
else:
end = mid
count += end
if a[i] * a[i] < c:
count -= 1
count = (count // 2)
if count < K:
l = c
else:
r = c
print(l)
Cependant, c'était TLE. Il semble que C ++ puisse le faire à temps, mais pas Python. .. .. Les gens qui sont AC semblent bien utiliser np.search de numpy pour le résoudre.