https://atcoder.jp/contests/abc141/tasks/abc141_d Das gestrige AtCoderD-Problem war ein Rabattgutscheinproblem. Einfach ausgedrückt, die Frage ist, wie Sie Rabattgutscheine, die zum halben Preis beliebig oft verwendet werden können, effizient einlösen können.
Um den Rabatt effizient anwenden zu können, muss ich jedes Mal den Höchstpreis erhalten. Zu diesem Zweck verwenden wir PriorityQueue, mit dem Sie Elemente hinzufügen und den Maximalwert mit logN bzw. 1 erhalten können. (Ich wusste es zum ersten Mal, nachdem ich diesen Kommentar gelesen hatte)
Instanziieren Sie die PriorityQueue wie folgt:
Main.kt
val tmpQueue: Queue<Int> = PriorityQueue<Int>() { i1: Int, i2: Int ->
return@PriorityQueue i2 - i1
}
Jetzt funktioniert es perfekt vor Ort! Ich dachte, aber AtCoders Richterserver gibt einen Kompilierungsfehler aus.
Main.kt:16:32: error: none of the following functions can be called with the arguments supplied:
Nach der Untersuchung scheint es, dass der Konstruktor, der die PriorityQueue instanziiert, indem nur der Komparator übergeben wird, aus Java1.8 stammt, und ich dachte, dass es vor der PriorityQueue von Java1.8 war (int initialCapacity, Comparator <? Super E> -Komparator) Bei der Verwendung wurde der Kompilierungsfehler behoben.
Main.kt
val tmpQueue: Queue<Int> = PriorityQueue<Int>(size) { i1: Int, i2: Int ->
return@PriorityQueue i2 - i1
}
Apropos, ich kenne die Laufzeitversion des Richterservers nicht, also schreibe ich ein Programm, das Systeminformationen ausgibt und überprüft.
CodeTest.kt
fun main(args: Array<String>) {
for ((key,value) in System.getProperties()) {
println("key -> $key value -> $value")
}
}
Das Ergebnis unten
key -> java.runtime.name value -> OpenJDK Runtime Environment
key -> sun.boot.library.path value -> /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64
key -> java.vm.version value -> 24.121-b00
key -> java.vm.vendor value -> Oracle Corporation
key -> java.vendor.url value -> http://java.oracle.com/
key -> path.separator value -> :
key -> java.vm.name value -> OpenJDK 64-Bit Server VM
key -> file.encoding.pkg value -> sun.io
key -> user.country value -> US
key -> sun.java.launcher value -> SUN_STANDARD
key -> sun.os.patch.level value -> unknown
key -> java.vm.specification.name value -> Java Virtual Machine Specification
key -> user.dir value -> /imojudge
key -> java.runtime.version value -> 1.7.0_121-b00
key -> java.awt.graphicsenv value -> sun.awt.X11GraphicsEnvironment
key -> java.endorsed.dirs value -> /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/endorsed
key -> os.arch value -> amd64
key -> java.io.tmpdir value -> /tmp
key -> line.separator value ->
key -> kotlin.home value -> /opt/kotlinc
key -> java.vm.spec...
Immerhin war die Laufzeit Java 1.7. Dies bedeutet, dass die in Java 1.8 hinzugefügten Methoden nicht verwendet werden können.
Ich muss in Zukunft vorsichtig sein. .. ..
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Comparator.html
Recommended Posts