Ein Hinweis zu AtCoder ABC155 Problem D Pairs.
AtCoder ABC155 am 2020/02/16 war zu beschäftigt, um daran teilzunehmen, aber aufgrund der Hingabe [Problem D](https: // Atcoder.jp/contests/abc155/tasks/abc155_d) Ich konnte mir keine Lösung vorstellen. Als ich den Kommentarartikel betrachtete, verstand ich, dass er nach der Dichotomiemethode gezählt werden sollte. Ich habe selbst versucht, in Python zu programmieren, aber ich konnte TLE nicht alleine verlassen.
Aus Vorheriger Vergleich habe ich vermutet, dass ich wahrscheinlich mit C ++ gehen könnte, aber
Ich war neugierig auf solche Dinge, also habe ich nachgeschlagen.
Fazit: Kann bestehen (aber ist es etwas schwierig?)
Als ich nach einer Person suchte, die mit Python3 AC nahm, war das Ergebnis so. Während der Wettbewerbszeit kamen nur zwei Personen durch, maspy war gelb und nohtaray war blau, aber gelb (Stand 20. März 2020). Die Ausführungszeit beträgt ca. 1100 ms.
In Anbetracht der Tatsache, dass nur zwei Personen rechtzeitig vorbeikommen können und dass die beiden Personen, die durchgehen, gelb und blau sind, scheint es ein schwieriges Problem zu sein, an meinen Fähigkeiten vorbeizukommen.
Ich habe es auch mit PyPy versucht, das eine signifikante Verbesserung in Vorheriger Vergleich (Submission # 10928876 zeigte. abc155 / submissions / 10928876)) war diesmal nicht sehr effektiv und TLE konnte nicht gelöst werden.
Zuerst habe ich die Ausführungszeiten verglichen. maspy's Submission # 10152895 nohtarays Submission # 10155744 Ich habe es auf meinen Server heruntergeladen und selbst geschrieben Programm Submission # 11068460 Außerdem wurde die Ausführungszeit verglichen, zu der jedes Programm für vier Testfälle ausgeführt wurde. Die folgenden Ergebnisse (Zeitbefehlsmessung der verstrichenen Zeit. Einheit ist Sekunden). Da die Ausführungsergebnisse selbst übereinstimmen, scheint das Programm selbst ordnungsgemäß zu funktionieren.
Programm | test01 | test02 | test03 | test04 |
---|---|---|---|---|
Mein Programm[Einreichung#11068460] | 0.045 | 0.039 | 9.576 | 9.576 |
Nohtaray's[Einreichung#10155744] | 0.303 | 0.288 | 1.140 | 1.119 |
Maspys[Einreichung#10152895] | 0.275 | 0.312 | 1.097 | 1.045 |
Die Größe des Testfalls ist wie folgt. Ai wurde durch Zufallszahlen erzeugt.
Programm | test01 | test02 | test03 | test04 |
---|---|---|---|---|
N | 20 | 20 | 200000 | 200000 |
Anzahl der positiven Zahlen | 10 | 10 | 100000 | 10000 |
Nummer Null | 1 | 1 | 1 | 1 |
Anzahl der negativen Zahlen | 9 | 9 | 99999 | 99999 |
K | 150 | 50 | 1500000000 | 500000000 |
Die Ergebnisse zeigen, dass mein Programm schneller ist, wenn N klein ist, aber wenn N groß ist Die Programme von maspy und nohtaray sind ungefähr zehnmal schneller. .. ..
Was ist der Unterschied? .. .. Werfen wir einen Blick auf die Programme von maspy und nohtaray, um dies herauszufinden. Es stellt sich heraus, dass die beiden Codes eine Funktion namens [numpy searchsorted] verwenden (https://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html). Ein Array wird auch für das zweite Argument verwendet. Es wurde erwartet, dass dies wahrscheinlich viel schneller sein würde als meine Handfunktion. Gibt es eine solche Funktion? .. .. .. Der Code ist kurz, auch dank dieser Verwendung.
Anmerkung 1 ist beendet, bis sich herausstellt, dass die Verwendung der sortierten Suche von numpy "miso" ist.
Ich fand heraus, dass ich nicht genug Wissen über Numpy hatte, um mit Python zu konkurrieren. Wenn Sie Lust haben, numpy searchsorted zu schreiben, oder wenn Sie Code schreiben könnten, der mit C ++ nicht einfacher zu TLE ist, werde ich ihn untersuchen und organisieren.
Recommended Posts