[PYTHON] Cython kommt zu AtCoder !!

Cython kommt zu AtCoder !!

Sprachaktualisierung Als Besatzungsmitglied konnte ich Cython in der neuen Umgebung für Richtertests ausprobieren, also habe ich es versucht. Übrigens, was war das erste Mal, dass ich Cython berührte? Ich weiß es nicht einmal (lacht)

Übrigens ist Python 3 nach dem Sprachupdate 3.8.0 und Cython 0.29.14.

Python-Code funktioniert wie er ist

ABC085C - Ich habe es mit Otoshidama versucht. Ich habe den Quellcode, der AC war, mit 678 ms bei Python 3 eingereicht, wie es bei Cython und AC bei 614 ms ist.

from sys import exit

N, Y = map(int, input().split())

for i in range(N + 1):
    for j in range(N + 1 - i):
        k = N - i - j
        if 10000 * i + 5000 * j + 1000 * k == Y:
            print('%d %d %d' % (i, j, k))
            exit()
print('-1 -1 -1')

Der Syntaxfehler ist CE anstelle von RE!

Hätten Sie nicht gedacht, dass Python 3 mit RE bestraft würde, obwohl die Compiler CE waren und selbst mit einem schlampigen Tippfehler keine Strafen? Cython wäre CE. Sie haben es geschafft !!

Wenn Sie versuchen, das = in der ersten Zuweisungsanweisung zu löschen, wird eine solche Fehlermeldung angezeigt.

Error compiling Cython file:
------------------------------------------------------------
...
from sys import exit

N, Y  map(int, input().split())
     ^
------------------------------------------------------------

Main.py:3:6: Syntax error in simple statement list
./Main.c:1:2: error: #error Do not use this file, it is the result of a failed Cython compilation.
    1 | #error Do not use this file, it is the result of a failed Cython compilation.
      |  ^~~~~

Es ist schnell zu tippen!

Wenn ich mir die Cython-Dokumentation anschaue, brauche ich anscheinend zwei Quellcodes, z. B. das Schreiben einer .pyx-Datei, das Kompilieren sowie das Importieren und Verwenden in .py, sodass ich zunächst nicht wusste, wie ich sie verwenden soll. Cython verfügt über den Pure Python-Modus, der anscheinend von AtCoder verwendet wird.

Infolgedessen AC. 6-mal schneller in 107ms !!

from cython import longlong

def main():
    N: longlong
    Y: longlong
    N, Y = map(int, input().split())

    i: longlong
    j: longlong
    for i in range(N + 1):
        for j in range(N + 1 - i):
            k: longlong = N - i - j
            if 10000 * i + 5000 * j + 1000 * k == Y:
                print('%d %d %d' % (i, j, k))
                return
    print('-1 -1 -1')

if __name__ == '__main__':
    main()

Anhang: Mit PyPy 3

Nach dem Sprachupdate war PyPy 3 7.3.0, AC bei 150 ms. Der Speicherverbrauch wurde jedoch im Vergleich zu 8,7 MB für Python 3 / Cython auf 64 MB erheblich erhöht.

Recommended Posts

Cython kommt zu AtCoder !!
Einführung in das Schreiben von Cython [Notizen]
AtCoder Hellblau werden
Golang ist schwer zu übersetzen. .. .. (Teil 1)
Cython Tutorial: Verwendung von shared_ptr
Probieren Sie Cython in kürzester Zeit aus