https://atcoder.jp/contests/abc141/tasks/abc141_d Le problème d'AtCoderD d'hier était un problème de bon de réduction, En termes simples, la question est de savoir comment appliquer efficacement des coupons de réduction qui peuvent être utilisés autant de fois que vous le souhaitez à moitié prix.
Afin d'appliquer efficacement la remise, je dois à chaque fois obtenir le prix maximum. Pour cela, nous utilisons PriorityQueue, qui vous permet d'ajouter des éléments et d'obtenir la valeur maximale avec logN et 1, respectivement. (Je le savais pour la première fois après avoir lu ce commentaire)
Alors instanciez le PriorityQueue comme suit:
Main.kt
val tmpQueue: Queue<Int> = PriorityQueue<Int>() { i1: Int, i2: Int ->
return@PriorityQueue i2 - i1
}
Maintenant, cela fonctionne parfaitement localement! J'ai pensé, mais le serveur de juge d'AtCoder donne une erreur de compilation.
Main.kt:16:32: error: none of the following functions can be called with the arguments supplied:
Après enquête, il semble que le constructeur qui instancie le PriorityQueue en ne passant que le comparateur provienne de Java1.8, et je pensais que c'était avant Java1.8 PriorityQueue (int initialCapacity, Comparator <? Super E> comparator) Lorsque j'ai utilisé, l'erreur de compilation a été résolue.
Main.kt
val tmpQueue: Queue<Int> = PriorityQueue<Int>(size) { i1: Int, i2: Int ->
return@PriorityQueue i2 - i1
}
En parlant de cela, je ne connais pas la version d'exécution du serveur de juge, donc j'écris un programme qui génère des informations système et le vérifie.
CodeTest.kt
fun main(args: Array<String>) {
for ((key,value) in System.getProperties()) {
println("key -> $key value -> $value")
}
}
Le résultat ci-dessous
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...
Après tout, le runtime était Java 1.7. Cela signifie que les méthodes ajoutées dans Java 1.8 ne peuvent pas être utilisées.
Je dois faire attention à l'avenir. .. ..
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Comparator.html