[JAVA] Utilisez Priority Queue avec kotlin (1.0.0) d'AtCoder (+ Enquête sur l'environnement du serveur de juge)

AtCoder Débutant Contest 141 D Problème

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. .. ..

Lien de référence

https://docs.oracle.com/javase/jp/8/docs/api/java/util/Comparator.html

Recommended Posts

Utilisez Priority Queue avec kotlin (1.0.0) d'AtCoder (+ Enquête sur l'environnement du serveur de juge)
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Préparez l'environnement CentOS 8 avec Sakura VPS
Comment utiliser git avec la puissance de jgit dans un environnement sans commandes git
CI l'architecture des applications Java / Kotlin avec ArchUnit
Que ce soit pour faire du côté serveur au moment de la reconstruction du système avec Kotlin ou Java
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
Trouvez le nombre de jours dans un mois avec Kotlin
J'ai essayé de vérifier le fonctionnement du serveur gRPC avec grpcurl
Coexistence de Flyway dans la base de données embarquée (h2) de l'environnement de développement et la base de données des versions (SQL Server) avec Spring Boot