complete 11057.kt 15835.kt 20411.kt 25345.kt 28242.kt 32628.kt
This commit is contained in:
29
storage/zeta/kt/completed/11057.kt
Normal file
29
storage/zeta/kt/completed/11057.kt
Normal file
@@ -0,0 +1,29 @@
|
||||
const val MOD = 10_007
|
||||
|
||||
val MEMORY = Array<IntArray>(1003) { IntArray(10) { -1 } }
|
||||
|
||||
fun countUprisingFrom(from: Int /*[0, 9]*/, length: Int): Int {
|
||||
if (MEMORY[length][from] != -1) {
|
||||
return MEMORY[length][from]
|
||||
}
|
||||
return if (length == 1) {
|
||||
MEMORY[length][from] = 1
|
||||
1
|
||||
} else {
|
||||
val s = (from..9).fold(0) { total, now ->
|
||||
(total + countUprisingFrom(now, length - 1)) % MOD
|
||||
}
|
||||
MEMORY[length][from] = s
|
||||
s
|
||||
}
|
||||
}
|
||||
|
||||
fun countTotalUprising(length: Int): Int {
|
||||
return ((0..9).sumOf { countUprisingFrom(it, length) } % MOD)
|
||||
}
|
||||
|
||||
|
||||
fun main() {
|
||||
val n = readln().toInt()
|
||||
println(countTotalUprising(n))
|
||||
}
|
||||
66
storage/zeta/kt/completed/15835.kt
Normal file
66
storage/zeta/kt/completed/15835.kt
Normal file
@@ -0,0 +1,66 @@
|
||||
import java.io.StreamTokenizer
|
||||
|
||||
|
||||
fun find(parents: IntArray, x: Int): Int {
|
||||
return if (parents[x] == x) {
|
||||
x
|
||||
} else {
|
||||
parents[x] = find(parents, parents[x])
|
||||
parents[x]
|
||||
}
|
||||
}
|
||||
|
||||
fun union(parents: IntArray, a: Int, b: Int): Boolean {
|
||||
val ra = find(parents, a)
|
||||
val rb = find(parents, b)
|
||||
|
||||
if (ra == rb) {
|
||||
return false
|
||||
} else if (ra < rb) {
|
||||
parents[rb] = ra
|
||||
} else {
|
||||
parents[ra] = rb
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
fun minimumDistanceOfExploration(n: Int, edges: List<Triple<Int, Int, Int>>): Int {
|
||||
val par = IntArray(n) { it }
|
||||
var minDist = 0
|
||||
edges.sortedBy { it.third }.forEach {
|
||||
val (a, b, w) = it
|
||||
if (union(par, a, b)) {
|
||||
minDist += w
|
||||
}
|
||||
}
|
||||
|
||||
return minDist
|
||||
}
|
||||
|
||||
|
||||
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())) {
|
||||
nextToken()
|
||||
val t = nval.toInt()
|
||||
|
||||
(1..t).forEach {
|
||||
nextToken()
|
||||
val n = nval.toInt()
|
||||
nextToken()
|
||||
val m = nval.toInt()
|
||||
|
||||
val edges = (1..m).map {
|
||||
nextToken()
|
||||
val s = nval.toInt() - 1
|
||||
nextToken()
|
||||
val e = nval.toInt() - 1
|
||||
nextToken()
|
||||
val w = nval.toInt()
|
||||
|
||||
Triple(s, e, w)
|
||||
}
|
||||
|
||||
println("Case #${it}: ${minimumDistanceOfExploration(n, edges)} meters")
|
||||
|
||||
}
|
||||
}
|
||||
25
storage/zeta/kt/completed/20411.kt
Normal file
25
storage/zeta/kt/completed/20411.kt
Normal file
@@ -0,0 +1,25 @@
|
||||
fun main() = with(System.`in`.bufferedReader()) {
|
||||
val iter = this.readLine().split(" ").iterator()
|
||||
|
||||
val m = iter.next().toLong()
|
||||
val seed = iter.next().toLong()
|
||||
val x1 = iter.next().toLong()
|
||||
val x2 = iter.next().toLong()
|
||||
|
||||
// x1 = (a * seed + c) % m
|
||||
// x2 = (a * x1 + c) % m
|
||||
|
||||
(0 until m).asSequence().map { a ->
|
||||
val t = (a * seed) % m
|
||||
val c = if (t <= x1) {
|
||||
x1 - t
|
||||
} else {
|
||||
m - (t - x1)
|
||||
}
|
||||
a to c
|
||||
}.first { (a, c) ->
|
||||
x2 == (a * x1 + c) % m
|
||||
}.let { (a, c) ->
|
||||
println("$a $c")
|
||||
}
|
||||
}
|
||||
56
storage/zeta/kt/completed/25345.kt
Normal file
56
storage/zeta/kt/completed/25345.kt
Normal file
@@ -0,0 +1,56 @@
|
||||
const val MOD = 1_000_000_007
|
||||
|
||||
val MEM_CHOOSE = Array<LongArray>(2001) { LongArray(2000) { -1 } }
|
||||
val MEM_POW = LongArray(2001) { -1 }
|
||||
|
||||
fun choose(n: Int, k: Int): Long {
|
||||
if (MEM_CHOOSE[n][k] != -1L) {
|
||||
return MEM_CHOOSE[n][k]
|
||||
}
|
||||
if (n == 1 || n == 0) {
|
||||
MEM_CHOOSE[n][k] == 1L
|
||||
return 1
|
||||
} else if (k == 0) {
|
||||
MEM_CHOOSE[n][k] = 1
|
||||
return 1
|
||||
} else if (k == 1) {
|
||||
MEM_CHOOSE[n][k] = n.toLong()
|
||||
return n.toLong()
|
||||
} else if (k == n) {
|
||||
MEM_CHOOSE[n][k] = 1
|
||||
return 1
|
||||
} else if (k == n - 1) {
|
||||
MEM_CHOOSE[n][k] = n.toLong()
|
||||
return n.toLong()
|
||||
} else {
|
||||
val res = (choose(n - 1, k - 1) + choose(n - 1, k)) % MOD
|
||||
MEM_CHOOSE[n][k] = res
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun powOf2(n: Int): Long {
|
||||
if (MEM_POW[n] != -1L) {
|
||||
return MEM_POW[n]
|
||||
}
|
||||
if (n == 0) {
|
||||
MEM_POW[n] = 1L
|
||||
return 1
|
||||
} else {
|
||||
val res = (powOf2(n - 1) * 2) % MOD
|
||||
MEM_POW[n] = res
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
fun modifier(k: Int): Long {
|
||||
return powOf2(k - 1)
|
||||
}
|
||||
|
||||
|
||||
fun main() = with(System.`in`.bufferedReader()) {
|
||||
val (n, k) = this.readLine().split(" ").map { it.toInt() }
|
||||
// val arr = this.readLine().split(" ").map { it.toInt() }
|
||||
println(choose(n, k) * modifier(k) % MOD)
|
||||
}
|
||||
52
storage/zeta/kt/completed/28242.kt
Normal file
52
storage/zeta/kt/completed/28242.kt
Normal file
@@ -0,0 +1,52 @@
|
||||
fun divisors(n: Long): List<Pair<Long, Long>> {
|
||||
val res = mutableListOf<Pair<Long, Long>>()
|
||||
|
||||
var i = 1L
|
||||
|
||||
while (i * i <= n) {
|
||||
if (n % i == 0L) {
|
||||
res.add(i to n / i)
|
||||
if (i != n / i) {
|
||||
res.add(n / i to i)
|
||||
}
|
||||
}
|
||||
i++
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
fun main() {
|
||||
val n = readln().toLong()
|
||||
|
||||
// nx^2 + (n+1)x -(n+2)
|
||||
// = (ax+b)(cx+d)
|
||||
// = acx^2 + (ad + bc)x + bd
|
||||
|
||||
// 다음 조건을 만족하는 a > 0, b, c > 0,d를 구하는 프로그램을 작성하시오.
|
||||
// n = a * c
|
||||
// (n+1) = a * d + b * c
|
||||
// b * d = -(n+2)
|
||||
|
||||
|
||||
divisors(n).flatMap { first ->
|
||||
divisors(n + 2).let {
|
||||
it.map {
|
||||
it.first to -it.second
|
||||
} + it.map {
|
||||
-it.first to it.second
|
||||
}
|
||||
}.map {
|
||||
first to it
|
||||
}
|
||||
}.firstOrNull { (first, second) ->
|
||||
val (a, c) = first
|
||||
val (b, d) = second
|
||||
n + 1 == a * d + b * c
|
||||
}?.let { (first, second) ->
|
||||
val (a, c) = first
|
||||
val (b, d) = second
|
||||
println("$a $b $c $d")
|
||||
} ?: println(-1)
|
||||
}
|
||||
40
storage/zeta/kt/completed/32628.kt
Normal file
40
storage/zeta/kt/completed/32628.kt
Normal file
@@ -0,0 +1,40 @@
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
class Bag(items: List<Long>) {
|
||||
val cumulativeWeight: List<Long>
|
||||
|
||||
init {
|
||||
var x = 0L
|
||||
|
||||
cumulativeWeight = listOf(0L) + items.map {
|
||||
x += it
|
||||
x
|
||||
}
|
||||
}
|
||||
|
||||
fun weight(to: Int): Long {
|
||||
return cumulativeWeight[to]
|
||||
}
|
||||
}
|
||||
|
||||
class BagManager(val n: Int, val bag1: Bag, val bag2: Bag) {
|
||||
fun smallestBig(k: Int): Long {
|
||||
return (max(0, k - n)..min(n, k)).map { i -> i to (k - i) }.minOf { (i, j) ->
|
||||
val w1 = bag1.weight(n - i)
|
||||
val w2 = bag2.weight(n - j)
|
||||
max(w1, w2)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun main() = with(System.`in`.bufferedReader()) {
|
||||
val (n, k) = this.readLine()!!.split(' ').map { it.toInt() }
|
||||
|
||||
val bag1 = Bag(ArrayDeque<Long>(this.readLine()!!.split(' ').map { it.toLong() }))
|
||||
val bag2 = Bag(ArrayDeque<Long>(this.readLine()!!.split(' ').map { it.toLong() }))
|
||||
|
||||
val manager = BagManager(n, bag1, bag2)
|
||||
println(manager.smallestBig(k))
|
||||
}
|
||||
Reference in New Issue
Block a user