Ali Buch in Python: Abschnitt 2-4, Datenstruktur

page 73: Expedition (POJ 2421)


# -*- coding: utf-8 -*-

from heapq import *

N = int(raw_input())
L = int(raw_input())
P = int(raw_input())
A = map(int,raw_input().split())
B = map(int,raw_input().split())

h = []

fuel = P
position = 0
ans = 0

A.append(L)
B.append(0)
N += 1

def solve():

    h = []

    fuel = P
    position = 0
    ans = 0


    for i in range(N):
        dl = A[i]-position

        while fuel - dl <0:
            if len(h) == 0:
                return -1
            fuel += -heappop(h)
            ans += 1
        fuel -=dl
        position = A[i]
        heappush(h,-B[i])

    return ans

print solve()

Im Gegensatz zu C ++ STL kommt python heappop () aus dem kleinsten Element heraus und entspricht dem Invertieren des Vorzeichens.

Seite 75: Zaunreparatur (PKU 3253) erneut



# -*- coding: utf-8 -*-

from heapq import *

N = int(raw_input())
L = map(int,raw_input().split())

h = []

cost = 0

for i in L:
    heappush(h,i)

while len(h)>1:
    l1 = heappop(h)
    l2 = heappop(h)
    cost += l1 + l2
    heappush(h,l1+l2)

print cost

Heapq-Lösung. Da es aus dem kleinsten Element stammt, ist der Heapq von Python so wie er ist. Der Berechnungsbetrag beträgt O (L, n log n).

Seite 85: Nahrungskette (POJ 1182)


# -*- coding: utf-8 -*-

from heapq import *
from unionfind import *

N = int(raw_input())
K = int(raw_input())
information = []
while 1:
    a = raw_input()
    if a == "":
        break
    information.append(map(int,a.split()))

u = unionfind(3 * N) 

ans = 0
for i in information:
    infclass = i[0]
    x = i[1]
    y = i[2]

    if x < 0 or x >=N or y <0 or y >=N or infclass <1 or infclass >2:
        ans +=1
        continue
    if infclass == 1:
        if u.issame(x, y+N) or u.issame(x, y+2*N):
            ans +=1
            continue
        else:
            u.unite(x, y)
            u.unite(x+N, y+N)
            u.unite(x+2*N, y+2*N)

    if infclass ==2:
        if u.issame(x, y) or u.issame(x, y+2*N):
            ans +=1
            continue
        else:
            u.unite(x, y+N)
            u.unite(x+N, y+2*N)
            u.unite(x+2*N, y)

print ans

Nein, es ist lustig. Durch Duplizieren der Elemente können Sie das Problem der Gruppierung reduzieren, sodass Union-Find sie mit hoher Geschwindigkeit verarbeiten kann.

Nach Beendigung von Sec2-4

Einführung und Übungen für Prioritätswarteschlangen, Dichotomiebäume, Union-Find-Bäume.

Vorerst habe ich es mit den Paketen heapq und union find geschrieben.

Bevor ich zu Abschnitt 2-5 gehe, werde ich versuchen, jeden einzelnen selbst zu implementieren.

Recommended Posts

Ali Buch in Python: Abschnitt 2-4, Datenstruktur
Ali Buch in Python: Sec. 2-5 Graph
Ali Buch in Python: Sec.2-5 Dyxtra-Methode
Ali Buch in Python: Sec. 2-5 Graph (Vorbereitung)
Ali Buch in Python: Abschnitt 2-3, Dynamische Planung (DP)
Ali Buch in Python: Seite 42 Münzausgaben
Ali-Buch in Python: Selbstimplementierung der Prioritätswarteschlange
Ali-Buch in Python: Seite 43 Abschnittsplanung
Ameisenbuch in Python: Seite 49 Zaunreparatur
Ameisenbuch in Python: Seite 47 Sarumans Armee (POJ 3069)
Behandeln Sie Umgebungsdaten in Python
Zeigen Sie UTM-30LX-Daten in Python an
Ali Buch in Python: Seite 45 Das kleinste Problem in lexikalischer Reihenfolge (POJ3617)
Holen Sie sich LeapMotion-Daten in Python.
Lesen Sie die Protokollpufferdaten mit Python3
Behandeln Sie Daten im NetCDF-Format mit Python
Python-Datenstruktur mit Chemoinfomatik gelernt
Hashing von Daten in R und Python
Bilderbuch-Datenstrukturalgorithmus Python
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part1-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part4-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part3-
[Python] Kapitel 04-06 Verschiedene Datenstrukturen (Erstellung eines Wörterbuchs)
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Dateneingabe / -ausgabe in Python (CSV, JSON)
Versuchen Sie, mit Binärdaten in Python zu arbeiten
[Python] Kapitel 04-03 Verschiedene Datenstrukturen (mehrdimensionale Liste)
[Python] Kapitel 04-04 Verschiedene Datenstrukturen (siehe Liste)
Holen Sie sich Google Fit API-Daten in Python
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Ameisenbuch mit Python (Kapitel 3 Zwischenausgabe ~)
[Python] Kapitel 04-02 Verschiedene Datenstrukturen (Listenmanipulation)
Zeichnen Sie Daten einfach in Shell und Python
[Python] Kapitel 04-07 Verschiedene Datenstrukturen (Wörterbuchmanipulation)
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Behandeln Sie 3D-Datenstrukturen mit Pandas
[Python] [Ergänzung] Kapitel 04-09 Verschiedene Datenstrukturen (Mengenlehre und Arithmetik in Mengen)
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Python-Variablen und Datentypen, die mit Chemoinfomatik gelernt wurden
Unittest in Python
Datenanalyse Python
Empfangen und Anzeigen von HTML-Formulardaten in Python
[Python] Vertauschen von Zeilen und Spalten mit Numpy-Daten
Epoche in Python
Zwietracht in Python
Lesen Sie Tabellendaten in einer PDF-Datei mit Python
Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python
Deutsch in Python
DCI in Python