Ceux qui sont venus se référer à cet article. Pardon. A, B, C, D compris A - Registration
s==t[0:-1]#(je veux dire[:-1]Mais je me sens bien...)
B - Easy Linear Programming Si vous tirez le numéro dans l'ordre, c'est ok Code source sale.
def j():
a,b,c,k=map(int,input().split())
o=0
x=k
if a!=0:
o+=a
k-=a
if k==0:
return a
elif k<0:
return x
if b!=0:
k-=b
if k<=0:
return a
if c!=0:
k-=c
o-=c
if k==0:
return o
elif k<0:
return o-k
print(j())
C - Skill Up Je l'ai sauté. Pas bon du tout. La prochaine fois, apprenez.
Postscript Il semble que cela puisse être fait par une recherche de bits. Alors apprenez je l'ai essayé. En conséquence, c'était un coup clair. La méthode de recherche de bits s'est avérée pratique.
n,m,x=map(int,input().split())
item=[list(map(int,input().split()))for i in range(n)]#Or, numéro d'algorithme Up
bag=[]#Comment acheter un livre qui remplit les conditions
for i in range(2**n):#Tout examiner
temp=[]#Livres à acheter
job=[0]*m#Compréhension
for s in range(n):#Examiner tous les chiffres
if (i>>s)&1:#Si vous achetez
temp.append(s)#Ajouter des livres à acheter
for y in range(m):
job[y]+=item[s][y+1]#Ajouter la compréhension
for s in range(len(job)):
if job[s]<x:#Si le niveau de compréhension est inférieur à X, interrompre
break
else:#Si toute compréhension est X ou plus
money=0
for s in temp:#Calculez le montant total
money+=item[s][0]
bag.append(money)
#S'il n'y a pas plus d'une combinaison à acheter-Sortie 1
print(min(bag) if len(bag)>=1 else -1)
D - Teleporter Si vous tournez K fois pour, ce ne sera que TLE, donc vous pouvez y aller s'il y a un surplus au début et à la fin de la boucle. J'ai pensé, mais je ne pouvais pas y aller. Quelqu'un me le dit. À propos, un exemple de l'énoncé du problème est donné.
n,k=map(int,input().split())
a=[int(i)-1 for i in input().split()]
ed=[False]*n
go=0
c=0
cc=0
while not ed[go]:#Fin si vous avez déjà réussi
print(a[go]+1)
ed[go]=True
go=a[go]
c+=1
ed=[False]*n
print()
while not ed[go]:#La deuxième boucle peut être différente 6,5,2,5,3,Dans le cas de 2, 6,2,5,3,2,5,3,2,5,...Devient
print(a[go]+1)
ed[go]=True
go=a[go]
cc+=1#Enregistrer sous une autre variable
print()
for i in range((k-c)%cc):
print(a[go]+1)
go=a[go]
print()
print(go+1)
Postscript Il était possible d'assembler while, d'enregistrer la valeur sans activer l'impression avec for, et d'ajouter la sortie lorsque la boucle n'était jamais bouclée.
n,k=map(int,input().split())
a=[int(i)-1 for i in input().split()]
p=0
visited=[0]*n
first=[]
roop=[]
while visited[p]!=2:#Arrêtez si vous y allez deux fois
if visited[p]==0:#J'y suis allé pour la première fois
first.append(p)
else:#Passé une fois
roop.append(p)
visited[p]+=1#Faire une marque
p=a[p]#Téléportation
if len(first)>k:#Si ça ne boucle jamais
print(first[k]+1)#Premier kth
else:
print(roop[(k-(len(first)-len(roop)))%len(roop)]+1)#Sinon, soustrayez la première boucle et la deuxième boucle de k, et le surplus du nombre de fois de la deuxième boucle
E et F ne pouvaient pas atteindre. C'était mon troisième défi, mais c'était difficile. Je pensais que je devais apprendre plus d'algorithmes et être capable de penser logiquement. À propos, la nouvelle note est de 68.
Recommended Posts