[PYTHON] TLE schien beängstigend zu sein, je nachdem, wie die Eingabe empfangen wurde

Ja. codeforces http://codeforces.com/contest/373/problem/C

Ursprünglicher Tweet https://twitter.com/cocodrips/statuses/412848727175331840 Kern, der veröffentlicht wurde https://gist.github.com/cocodrips/8001370

Den vollständigen Text des Originalcodes finden Sie in der obigen Veröffentlichung.

ursprünglich


if __name__ == "__main__":
    num = map(int, raw_input().split())
    num=num[0]
    data = []
    for _ in range(num):
        next=map(int, raw_input().split())
        data.append(next[0])
    solve(data)

mein Vorschlag


if __name__ == "__main__":
    num = int(raw_input())
    data = []
    for x in range(num):
        data.append(int(raw_input()))
    solve(data)

Kopieren Sie für die Testdaten den Beispielfall und bereiten Sie 1 Zeile + 200.000 Datenzeilen vor. Die erste Zeile gibt die Anzahl der anzugebenden Zeilen an, und die folgenden 200.000 Zeilen sind die in Texto kopierten Daten.

Ichios CPU und Speicher Processor 2.5 GHz Intel Core i5 Memory 16 GB 1333 MHz DDR3

Zeitmessung

time


import=time
start=time.clock()
##Anderer Ausführungsteil
end=time.clock()
t=end-start

Wie du kommentiert hast


if __name__ == "__main__":
    num = int(raw_input())
    data = (int(raw_input()) for _ in xrange(num))
    solve(data)

Führen Sie 3 Mal aus und listen Sie den Mittelwert in der folgenden Tabelle auf

Teil 1: Originaldaten Teil 2: num = int (raw_input ()) Nur die Art und Weise, wie die erste Zeile empfangen wird, wird geändert Teil 3: Ändern Sie nur, wie data.append (int (raw_input ())) empfangen wird, während Sie mit for drehen Teil 4: Beide haben sich geändert Teil 5: Wie Sie kommentiert haben

Muster Verarbeitungszeit
Teil 1 0.990795 Sekunden
Teil 2 0.995793 Sekunden
Teil 3 0.661866 Sekunden
Teil 4 0.677707 Sekunden
Teil 5 0.647318 Sekunden

Der Zeitunterschied war diesmal signifikant in Bezug auf den Empfang ab der zweiten Zeile ...

Der Testfall in meiner ersten Zeile war 200.000, und ich erhielt nur 6 Ziffern pro Zeile von 500.000, was die maximale TLE unter den Voraussetzungen für die Frage war, und ich konnte den Zeitunterschied nicht spüren.

Auf den ersten Blick scheint es keinen großen Unterschied zwischen Teil 3, 4 und Teil 5 zu geben, und es scheint gut zu sagen, dass es einen Geschwindigkeitsunterschied gibt, je nachdem, ob er weniger als 0,65 Sekunden beträgt oder nicht.

Als Bonus

data.append(input())


 Als ich den Cast mit int entfernt habe, hat es einige Male länger gedauert, daher scheint es besser, ihn nicht zu entfernen.

Recommended Posts

TLE schien beängstigend zu sein, je nachdem, wie die Eingabe empfangen wurde
So filtern Sie die externen Schlüssel, die auf dem Django-Verwaltungsbildschirm ausgewählt werden können
Überlegen Sie, wie Sie Python auf Ihrem iPad programmieren können
So registrieren Sie dieselben Daten mehrmals mit einer Eingabe auf dem Verwaltungsbildschirm von Django
So lösen Sie das Problem, dass Videoinhalte unter Firefox für Linux nicht abgespielt werden können
So wechseln Sie die Konfigurationsdatei, die von Python gelesen werden soll
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
So stellen Sie Pybot, das einfachste Python-Lehrbuch, auf Heroku bereit
Das Problem wird je nach Formulierungsmethode leichter zu lösen
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek
So drucken Sie Zeichen auf der Konsole, bevor Sie in ARM starten
Verwendung des Generators
So registrieren Sie sich bei pypi
[Python] Verwendung von input ()
Wie benutzt man den Dekorateur?
So erhöhen Sie die Achse
So starten Sie die erste Projektion
Die Platte, von der ich süchtig war, als ich MeCab in Heroku einsetzte
Ein Hinweis zum Überprüfen der Verbindung zum Lizenzserver-Port
Wie einfach ist es, ein Medikament auf dem Markt zu synthetisieren?
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde
Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente
Verwendung von Jupyter am Frontend von Spacon ITO
Unterschied in der Ausführungsgeschwindigkeit abhängig vom Schreiben der Cython-Funktion
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
So spiegeln Sie Validierungsfehler und Eingabeinhalte auf der vorherigen Seite wider, ohne Rendering in der Aktion zu verwenden