[Python] ABC133B (Problem mit dem oberen rechten Dreieck) [At Coder]

Ein Ort, an dem Programmanfänger wahrscheinlich stolpern. Doppelschleife ohne Duplizierung. Ich definiere diese Art von Problem willkürlich als das "Problem des oberen rechten Dreiecks" w

ABC133B Difficulty:137 Es ist schwierig, das Problem zu verstehen, wenn es einen Index gibt ... Im Moment kann ich es mir nicht vorstellen, auch wenn es D-Dimension heißt, also stelle ich es mir in 2 Dimensionen vor. Zusamenfassend ① Berechnen Sie alle Kombinationen von Abständen zwischen zwei verschiedenen Punkten ② Ob jede Entfernung eine ganze Zahl ist Wenn Sie nachschlagen k

① Berechnen Sie alle Kombinationen von Abständen zwischen zwei verschiedenen Punkten

スクリーンショット 2020-03-21 6.20.34.png Kombination von Abständen zwischen zwei verschiedenen Punkten = ** Suche alle Dreiecke oben rechts (gelber Teil!) **! Also "Problem mit dem oberen rechten Dreieck"! !! !! (Punkte A und B, Punkte A und C, ... Punkte D und E)

Wenn Sie die vollständige Suche des oberen rechten Dreiecks (5 Zeilen * 5 Spalten) codieren, sieht es so aus

test.py


for i in range(5):
    for j in range(i+1,5):
        #Entfernungsberechnung

i ist die 0. Zeile (A-Zeile), 1. Zeile (B-Zeile), 2. Zeile (C-Zeile), 3. Zeile (D-Zeile), 4. Zeile (E-Zeile) Wenn i 0 ist, ist j "Bereich (1,5)" → "1,2,3,4" Wenn i 1 ist, ist j "Bereich (2,5)" → "2,3,4" Wenn i 2 ist, ist j "Bereich (3,5)" → "3,4" Wenn i 3 ist, ist j "Bereich (4,5)" → "4" Wenn i 4 ist, ist j "Bereich (5,5)" → keine, also wird nichts verarbeitet. ⇨ Fest ** 10 Stellen (4 + 3 + 2 + 1 + 0) im oberen rechten Dreieck (gelber Teil!) ** können vollständig durchsucht werden!

Wenn Sie das verstehen können, egal was das Problem mit dem oberen rechten Dreieck ist: "Ich habe vor nichts mehr Angst."

② Ob jede Entfernung eine ganze Zahl ist

Das ist einfach. %1==0 or is_integer Ich denke es ist egal welches. Ich kann nicht gut Englisch, also benutze ich das erstere.

①+② Zusammenfassend sieht es so aus

test.py



def LI(): return list(map(int,input().split()))
N,D = LI()
X = [LI() for _ in range(N)]
_ans = 0
for i in range(N):
    for j in range(i+1,N):
        temp = 0
        for k in range(D):
            temp += (X[j][k]-X[i][k])**2
        if temp**0.5%1==0:
            _ans += 1
print(_ans)

Ich denke, dass der Ort, an dem "temp = 0" beschrieben wird, intuitiv wird, wenn Sie die Anzahl der Probleme verwalten. Die Formel für den Abstand zwischen den beiden Punkten lautet: Erinnern Sie sich an die Mathematik der Mittelstufe!

Ähnliches Thema (Dreifachschleifenproblem ohne Duplizierung des oberen rechten Dreiecksproblems)

Ich denke, das wird Ihr Verständnis vertiefen. Anzahl der AOJ (ITP1_7_B) -Kombinationen

So ~

test.py


def LI(): return list(map(int,input().split()))
while 1:
    n,x = LI()
    if n==x==0:
        break
    _ans = 0
    for i in range(1,n+1):
        for j in range(i+1,n+1):
            for k in range(j+1,n+1):
                if i+j+k==x:
                    _ans += 1
    print(_ans)

Es ist nicht das Hauptthema dieses Artikels, aber wenn Sie über die Extras sprechen, k = x-i-j (k Bedingung: 1 <= k <= n und j <k) Wenn Sie es einstellen, können Sie es mit einer doppelten for-Anweisung lösen! !! !!

** (Hinzugefügt am 2020/05/07) ** Derzeit ist das Problem des oben genannten Triple for Statement Schreiben Sie Code mit itertools.combinations! Hier klicken für Details! [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 1/22]

** (Hinzugefügt am 26. Mai 2020) ** スクリーンショット 2020-03-21 6.20.34.png

Es wird sein. itertools.combinations_with_replacement ist eine doppelte Kombination! !! !!

Ende!

Recommended Posts

[Python] ABC133B (Problem mit dem oberen rechten Dreieck) [At Coder]
[Bei Coder] ABC128B - Handbuch
[Python] AGC043A (Problemlesefähigkeit und DP) [At Coder]
[Python] Competitive Pro-Vorlage [At Coder]
[At Coder] ABC085C - Otoshidamas Python-Antwort
Bei Coder (2020/09/08)
[At Coder] Anfängerwettbewerb 175 Einführung in die ABCD-Python-Lösung
[Bei Coder] Lösen Sie das Problem der Dichotomie
[Python] ABC159D (High School Mathematics nCr) [Bei Coder]
Python bei Docker
Füllen Sie bei Coder
Bei Coder # 1 um Mitternacht
[Bei Coder] Lösen eines typischen BFS-Problems [A - Dunkler und Dunkler]
[Python] [BFS] Beim Coder-Anfängerwettbewerb 168-D [.. Double Dots]