kotlin learning

on board: IntelliJ IDEA Community Edition 2020.1.1 x64

beautify: ctrl+alt+L
rename: shift+F6, press Enter
skip to specific line: ctrl+G
dulplicate current line: ctrl+D
delete current line: ctrl+X

codeforce round#646

import java.util.*

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

fun main() {

    fun query(ixs: Iterable<Int>): Int {//参数为1..n
        var num = 0
        val joiner = StringJoiner(" ")//一个专门用来将里面元素输出成字符串的东西
        for (ix in ixs) {
            num++
            joiner.add(ix.toString())
        }
        println("? $num $joiner")
        return readLn().toInt()
    }


    val Case = readInt()
    repeat(Case) {
        val (n, k) = readInts()
        val subsets = Array(k) {
            val split = readLn().split(" ")//读入同一行多个整数,返回一个类似列表的东西
            //println(split)
            split.subList(1, split.size).map { it.toInt() }.toSet()//列表截取,将元素转化为整数
        }
        val maxx = query(1..n)
        var l = 1
        var r = n
        while (r > l) {
            val mid = (l + r) / 2
            if (query(l..mid) == maxx) {
                r = mid
            } else {
                l = mid + 1
            }
        }
        val answer = IntArray(k) {
            if (l in subsets[it]) query((1..n).toSet().minus(subsets[it])) else maxx//集合运算
        }
        println("! " + answer.joinToString (" "))
        readLn()
    }
}
private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

fun main() {
    val Case = 1
    repeat(Case) {
        val n = readInt()
        val cost = LongArray(n + 1)
        val init = IntArray(n + 1)
        val goal = IntArray(n + 1)
        val adj = Array(n + 1) { mutableListOf<Int>() }//保持读入顺序不变的set
        for (i in 1..n) {
            val (a, b, c) = readInts()
            init[i] = b
            goal[i] = c
            cost[i] = a.toLong()
        }

        for (i in 1..n - 1) {
            val (a, b) = readInts()
            adj[a].add(b)
            adj[b].add(a)
        }

        var answer = 0L

        fun dfs(now: Int, fa: Int): Long {
            var rem0 = 0L
            var rem1 = 0L
            if (init[now] != goal[now]) {
                when (init[now]) {
                    0 -> rem0++
                    1 -> rem1++
                }
            }
            for (to in adj[now]) if (to != fa) {
                cost[to] = minOf(cost[to], cost[now])
                val del = dfs(to, now)
                if (del < 0) {
                    rem0 -= del
                } else {
                    rem1 += del
                }
            }
            answer += 2L * minOf(rem0, rem1) * cost[now]
            return rem1 - rem0
        }

        if (dfs(1, 0) == 0L) {
            println(answer)
        } else {
            println(-1)
        }


    }
}

kotlin heroes 4

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

fun main() {
    var t = readInt()
    for (testcase in 0 until t) {
        var (n, m) = readInts()
        var a = Array(m) {
            var (x, y,z) = readInts()
            struct(x-1,y-1,z)
        }
        var ans=Array(n){0}

        fun solve() {
            for (i in a.sortedByDescending{it.w}){
                //println("${i.u},${i.v},${i.w}")
                if (ans[i.u]==0) ans[i.u]=i.w
                if (ans[i.v]==0) ans[i.v]=i.w
                if (i.w!= minOf(ans[i.u],ans[i.v])){
                    println("NO")
                    return
                }
            }
            println("YES")
            println(ans.joinToString(" "))
        }
        solve()


    }
}


class struct(val u: Int, val v: Int, val w: Int)

codeforces round #644

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

fun main() {
    var t = readInt()
    repeat(t) {
        var (n,m) = readInts()
        var a=Array(n){
            var res=0L
            for (c in readLn()){
                res=res*2+(c-'0')
            }
            res
        }
        a.sortByDescending { it }
        //a.forEach { println(it) }
        var l=0L
        var r=(1L shl m)-1
        val TrueRank=(l+r-n)/2
        var ans=TrueRank
        while (l<=r){
            var mid=(l+r)/2
            var value=mid
            for (x in a) if (x<mid) mid--
            if (mid>TrueRank){
                r=value-1
            }
            else if (mid<TrueRank){
                l=value+1
            }
            else{
                var flag=true
                for (x in a) if (x==value){
                    flag=false
                }
                if (flag){
                    ans=value
                    break
                }
                else{
                    l=value+1
                }
            }
        }

        fun printX(L:Long,m:Int){
            if (m==0) return
            printX(L/2,m-1)
            print(L%2)
        }

        printX(ans,m)
        println()
    }
}
private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

fun main() {
    var t = readInt()
    repeat(t) {
        var (n,m,a,b) =

 readInts()
        if (n*a!=m*b){
            println("NO")
        }else{
            println("YES")
            var ans=Array(n){Array(m){0} }
            var pos=0
            for (i in 0 until n){
                (0..a-1).map{it->(it+pos)%m}.forEach{ans[i][it]=1}
                pos=(pos+a)%m
            }

            (0..(n-1)).forEach{ println(ans[it].joinToString ( "" )) }
        }


    }
}
private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

fun main() {
    var t = readInt()
    repeat(t) {
        var (n, m) = readInts()
        //var a=Array<String>(n,{ readLn() })
        var a = Array(n) { readLn() }

        fun solve(): String {

            fun check(test: String): Boolean {
                for (i in 0 until n) {
                    var num = 0
                    for (j in 0 until m) {
                        if (a[i][j] != test[j]) num++
                    }
                    if (num > 1) return false
                }
                return true
            }


            for (i in 0 until m) {
                for (j in 0 until 26) {
                    val c = ('a' + j).toChar()
                    var new = a[0].substring(0, i) + c + a[0].substring(i + 1, m)
                    if (check(new)) {
                        return new
                    }
                }
            }
            return "-1"
        }

        println(solve())

    }
}
private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

/*

fun main() {
    var t = readInt()
    repeat(t) {
        var n=readInt()
        var a=Array(n){readLn().map{it=='1'}.toBooleanArray()}

        fun check():Boolean{
            for (i in 0 until n-1){
                for (j in 0 until n-1){
                    if (a[i][j]&&(!(a[i][j+1]||a[i+1][j]))) return false
                }
            }
            return true
        }

        println(if (check()) "YES" else "NO")

    }
}
*/

fun main() {
    var t = readInt()
    repeat(t) {
        var n=readInt()
        var a=Array(n){readLn()}

        fun check():Boolean{
            for (i in 0 until n-1){
                for (j in 0 until n-1){
                    if (a[i][j]=='1'&&(!(a[i][j+1]=='1'||a[i+1][j]=='1'))) return false
                }
            }
            return true
        }

        if (check()){
            println("YES")
        }else{
            println("NO")
        }

    }
}

codeforces round #643

import kotlin.math.min

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

val INF: Int = 1000000000

fun main() {
    val t = 1
    repeat(t) {
        var (N, A, R, M) = readInts()
        var T = min(A + R, M)
        var a = readInts()

        val f: (Int) -> Long = { H ->
            var add = 0L
            var rem = 0L
            a.forEach {
                if (H > it) add += (H - it)
                else rem += (it - H)
            }
            var tran = min(add, rem)
            T * tran + (add - tran) * A + (rem - tran) * R


        }


        var l = a.min()!!
        var r = a.max()!!
        var ans: Long = 1L * INF * INF
        while (l <= r) {
            var mid = (l + r) / 2
            var left = f(mid)
            var right = f(mid + 1)
            ans = min(ans, left)
            ans = min(ans, right)
            if (right - left > 0) {
                r = mid - 1
            } else {
                l = mid + 1
            }
        }
        println(ans)

    }
}

import java.lang.StringBuilder

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

//val INF: Int = 1000000000

fun main() {
    val t=1
    repeat(t) {
        var (n,s) = readInts()
        val ans = StringBuilder()
        repeat(n-1){ ans.append("1 ")}
        var final = s-(n-1)
        ans.append(final.toString())
        if (final-1>(n-1)){
            println("YES")
            println(ans)
            println(final-1)
        }else{
            println("NO")
        }


    }
}
import kotlin.math.max
import kotlin.math.min

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

val INF: Long = 1000000000

fun main() {
    var t = readInt()
    repeat(t) {
        var (a,k) = readLongs()
        for (i in 2..k){
            var tmp=a.toString().map{it.toString().toInt()}
            var mul=(tmp.min()?:0)*(tmp.max()!!)
            if (mul==0) break
            a+=mul
        }
        println(a)
    }
}

Kotlin Heroes: Episode 2

A

withindex, tosortedset, take, jointostring

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles


fun main() {
    val t = 1
    repeat(t) {
        var n = readLine()!!.toInt()
        val a = readInts().withIndex().toSortedSet(compareBy { it.value })
        if (a.size < 3) {
            println("-1 -1 -1")

        } else {
            println(a.take(3).joinToString(" ") { (it.index + 1).toString() })
        }

    }
}

Kotlin Heroes: Episode 3

B

// list, ?=, flatMap, firstornull

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles


//        var n = readLine()!!.toInt()
//        var a = readLine()!!.split(" ").map({it.toInt()}).toMutableList()

val INF: Int = 1000000000

fun main() {
    var t = readInt()
    repeat(t) {
        var n = readLine()!!.toInt()
        val segments = List(n) { readInts() }
        val toTry = segments.flatMap { listOf(it[0] - 1, it[0], it[1], it[1] + 1) }
        println(toTry.firstOrNull { x ->
            segments.count { it[0] <= x && x <= it[1] } == 1
        } ?: -1)

    }
}

C

// sort,very standard

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles

private fun readArray() = readStrings().map { it.toInt() }.toIntArray() // list of ints

var INF = 1_000_000_000 + 10


fun main() {
    var t = readInt()
    while (t-- > 0) {
        var n = readInt()
        var a = readInts()
        a.sorted()
        var sum = 0
        var minn = Pair(INF, 0)
        for (i in a.indices) {
            if (a[i] > 0) {
                sum += a[i]
                if (a[i] < minn.first)
                    minn = Pair(a[i], i)
            }
            if (a[i] < 0 && -a[i] < minn.first)
                minn = Pair(-a[i], i)
        }
        println(sum - minn.first)
        var ans = mutableListOf<Int>()
        for (i in a.indices) {
            if ((a[i] > 0 && i != minn.second) || (a[i] < 0 && i == minn.second))
                ans.add(1)
            else
                ans.add(0)
        }
        println(ans.joinToString(""))
    }
}

A

//class

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles


fun main() {
    var t = readInt()
    repeat(t) {
        var n = readInt()
        println(n.round().convert())
    }
}

fun Int.convert(): String {
    return when {
        this >= 1000000 -> {
            "${this / 1000000}M"
        }
        this >= 1000 -> {
            "${this / 1000}K"
        }
        else -> {
            "$this"
        }
    }
}

fun Int.round(): Int {
    return when {
        this >= 1000000 -> {
            (this + 500000) / 1000000 * 1000000
        }
        this >= 1000 -> {
            (this + 500) / 1000 * 1000
        }
        else -> {
            this
        }
    }
}
//import

import kotlin.math.roundToInt


private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readDouble() = readLn().toDouble() // single double
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints
private fun readLongs() = readStrings().map { it.toLong() } // list of longs
private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles


fun main() {
    var t = readInt()
    repeat(t) {
        var n = readInt()
        solve(n)
    }
}

fun solve(n: Int) {
    if (n >= 999500) {
        println((n / 1000000.0).roundToInt().toString() + "M")

    } else if (n >= 1000) {
        println((n / 1000.0).roundToInt().toString() + "K")
    } else println(n)
}
原文地址:https://www.cnblogs.com/reshuffle/p/12918224.html