朋友家的猫咪,特别可爱。
翻译
跟你两个数组 a 和 b,都包含 n 个数字,给你一个整数 k。
每一次移动,你可以交换 a 和 b 数组内任意一个数组。你的任务是在不超过 k 次移动的情况下,使 a 的和最大。
输入格式
第一行输入数字 t,表示 t 组测试用例。
每个测试用例,第一行输入 n k,用空格分隔。
第二行和第三行分别输入 a 和 b,用空格分隔。
输出格式
每个测试用例输出最大和。
分析
可以排序列表,然后将 b 中最大值与 a 中最小值比较,如果 a 中的值小,就交换数值,然后判断步数 k 是否到达,如果没到达就重新排序重复以上步骤。
代码(kotlin)
// https://codeforces.com/contest/1353/problem/B
import java.io.*
private var br: BufferedReader? = null
private fun br(): BufferedReader? {
if (br == null) {
var isLocal = false
val file = File("./file/input.txt")
try {
isLocal = file.exists()
} catch (e: Exception) {
}
br = if (isLocal) {
BufferedReader(BufferedReader(FileReader(file)));
} else {
BufferedReader(InputStreamReader(System.`in`))
}
}
return br
}
private fun readLn() = br()?.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
fun case() {
var (n, k) = readInts()
var a = readInts().toMutableList()
var b = readInts().toMutableList()
a = a.sorted().toMutableList()
b = b.sortedDescending().toMutableList()
while (k-- > 0) {
if (b[0] > a[0]) {
a[0] = b[0].also { b[0] = a[0] }
a = a.sorted().toMutableList()
b = b.sortedDescending().toMutableList()
} else {
break
}
}
println(a.sum())
}
fun main() {
var t = readInt()
while (t-- > 0) {
case()
}
}
更多代码尽在 https://github.com/Tconan99/Codeforces
by 费城的二鹏 2020.05.19 长春
网友评论