Questions passées résolues pour la première fois
Je ne pensais pas que je ferais une telle pena juste par malentendu Ça a été terrible ces deux derniers jours, donc je dois être un peu plus calme
Sortez simplement le reste
answerA.py
a,b=map(int,input().split())
print((a+b)%24)
Vérifiez les points de contrôle dans l'ordre et mettez à jour
answerB.py
n,m=map(int,input().split())
ab=[list(map(int,input().split())) for i in range(n)]
cd=[list(map(int,input().split())) for i in range(m)]
def manh(x,y):
return abs(x[0]-y[0])+abs(x[1]-y[1])
ans=[]
for i in range(n):
ans_sub=[0,manh(ab[i],cd[0])]
for j in range(m):
k=manh(ab[i],cd[j])
if k<ans_sub[1]:
ans_sub=[j,k]
ans.append(ans_sub[0])
for i in range(n):
print(ans[i]+1)
Au début, j'ai mal compris et j'ai écrit le sol au plafond. Vous pouvez effectuer une recherche à partir du front dans la plage $ \ sqrt {n} $.
answerC.py
import math
n=int(input())
l=math.floor(math.sqrt(n))
k=math.floor(math.log10(n))+1
for i in range(2,l+1):
if n%i==0:
a,b=i,n//i
x=max(math.floor(math.log10(a))+1,math.floor(math.log10(b))+1)
k=min(x,k)
print(k)
Code qui était un peu plus rapide en utilisant exit
answerC_faster.py
from sys import exit
import math
n=int(input())
l=math.floor(math.sqrt(n))
for i in range(l+1,0,-1):
if n%i==0:
a,b=i,n//i
h=max(a,b)
k=math.floor(math.log10(h))+1
print(k)
exit()
Tout d'abord, il est évident que vous devez d'abord sélectionner ceux qui ont la valeur la plus élevée, et ceux avec la même valeur auront la même valeur totale ** quel que soit celui que vous sélectionnez, alors triez-les par ordre décroissant puis utilisez la fonction groupby. Je l'ai appliqué. Ici, lorsqu'il y a A ou plusieurs éléments avec la valeur la plus élevée, il suffit de sélectionner les éléments de manière à satisfaire la condition de A ou plus et B ou moins parmi les éléments. (Je ne pouvais pas du tout me débarrasser du bogue car je pensais que la valeur à sélectionner parmi les éléments était différente du nombre d'éléments. ** J'ai pris le bogue sans abandonner ** vaut la peine d'être évalué. , Je sais comment le résoudre, mais j'ai fait une erreur en écrivant le code ... Quand j'étais sur le point d'entrer dans le marais, j'ai cru devoir le revoir avec le sentiment de ** recommencer ** ...) Ensuite, lorsque A est plus grand que le nombre des éléments les plus précieux, la moyenne diminue au fur et à mesure que vous sélectionnez les éléments, vous voulez donc réduire autant que possible le nombre d'éléments sélectionnés. Par conséquent, il est préférable de sélectionner exactement A, qui peut être facilement obtenu en comptant les éléments dans l'ordre à partir de l'avant. (** Cela aurait été plus facile si j'avais gardé le tableau d'origine avec group by ... **) Le code écrit sur la base des considérations ci-dessus est le suivant. En plus des erreurs ci-dessus, ce problème était trop terrible, ** j'ai essayé d'utiliser scipy et je n'ai pas pu l'utiliser **, ** je ne voulais pas casser **. De plus, je pense qu'il est important de ** verbaliser la solution ** parce que certaines parties peuvent être comprises lorsqu'elles sont verbalisées jusqu'à présent.
answerD.py
import math
#from scipy.special import comb
def combinations_count(n, r):
return math.factorial(n) // (math.factorial(n - r) * math.factorial(r))
def groupby(a):
a2=[[a[0],1]]
for i in range(1,len(a)):
if a2[-1][0]==a[i]:
a2[-1][1]+=1
else:
a2.append([a[i],1])
return a2
N,A,B=map(int,input().split())
v=[int(i) for i in input().split()]
v.sort(reverse=True)
v=groupby(v)
if A<=v[0][1]:
#C'est faux
m=min(v[0][1],B)
co=0
for i in range(A,m+1):
#v[0][1]Était M
co+=combinations_count(v[0][1],i)
print(v[0][0])
print(co)
else:
al=0
l=len(v)
C=0
for i in range(l):
C+=v[i][1]
if C<=A:
al+=(v[i][0]*v[i][1])
else:
C-=v[i][1]
al+=(v[i][0]*(A-C))
co=combinations_count(v[i][1],A-C)
#J'ai oublié de casser
break
print(al/A)
print(co)
Recommended Posts