[PYTHON] [Bei Coder] Acing C-XYZ Triplets

Dies ist die C-Ausgabe des Acing Programming Contest 2020. Ich hatte es schwer und schaute mit dem fehlgeschlagenen Code zurück.

Fehler 1 (TLE)

n=int(input())
def f_count(j):
   count=0
   for x in range(1,j):
       for y in range(1,j):
           for z in range(1,j):
               if x**2+y**2+z**2+x*y+y*z+z*x==j:
                   count+=1
   return count
   
for i in range(1,n+1):
   print(f_count(i))

Dies ist eine Methode zum Definieren einer Funktion f_count (j), die f (n) findet, j 1 bis n zuweist und ausgibt.

Da die Zeit vorbei war, habe ich versucht, z zu löschen, aber es war immer noch im Laufe der Zeit.

** <Punkt 1> **

In der Antwort beträgt der Maximalwert von n 10 ** 4. Da x, y, z quadratisch sind, ist der Maximalwert von x, y, z kleiner als 100.

** <Punkt 2> **

Suchen Sie bei f (1) x, y, z von 1 bis 100. → Suchen Sie bei f (2) x, y, z von 1 bis 100. Es braucht Zeit.

Fehler 2

N=int(input())
#f(N)Liste zu setzen
ans_list=[0]*N
for x in range(1,100):
   for y in range(1,100):
       for z in range(1,100):
           s=x**2+y**2+z**2+x*y+y*z+z*x
           if s<=N:
               ans_list[s]+=1
           
  
for i in range(1,N+1):
  print(ans_list[i])

IndexError: Listenindex außerhalb des Bereichs

Ersetzen Sie x, y, z durch 1 bis 100, berechnen Sie den Wert von x ** 2 + y ** 2 + z ** 2 + x * y + y * z + z * x und listen Sie das Ergebnis ans_list auf Ich habe es reingelegt.

Ich habe jedoch einen Fehler im Bereich gemacht. Da ans_list [0] = [], ans_list [1] = f (1), ans_list [N-1] = f (N-1), ist f (N) nicht mehr in der Liste enthalten.

Richtige Antwort 1

N=int(input())
max_x=int(N**0.5)
ans_list=[0]*N

for x in range(1,max_x):
   for y in range(1,max_x):
       for z in range(1,max_x):
           s=x**2+y**2+z**2+x*y+y*z+z*x
           if s<=N:
               ans_list[s-1]+=1
               
for i in range(N):
   print(ans_list[i])

Ich setze ans_list [s-1] + = 1. .

Richtige Antwort 2

n=int(input())

keys=[i for i in range(1,n+1)]
values=[0 for i in range(1,n+1)]
dic=dict(zip(keys,values))

for x in range(1,100):
    for y in range(1,100):
        for z in range(1,100):
            num=x**2+y**2+z**2+x*y+y*z+z*x
            if 1<=num<=n:
                dic[num]+=1


for key in dic:
    value=dic[key]
    print(value)

Für die richtige Antwort 1 habe ich versucht, daraus ein Wörterbuch zu machen, da der Index der Liste und n von f (n) nicht klar voneinander abweichen.

Recommended Posts

[Bei Coder] Acing C-XYZ Triplets
Füllen Sie bei Coder
Bei Coder # 1 um Mitternacht
[At Coder] Ausgabemethode
[Bei Coder] ABC128B - Handbuch
[Python] Competitive Pro-Vorlage [At Coder]
[At Coder] ABC085C - Otoshidamas Python-Antwort