結果
| 問題 |
No.5020 Averaging
|
| コンテスト | |
| ユーザー |
clam010
|
| 提出日時 | 2024-02-25 16:59:29 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
AC
|
| 実行時間 | 335 ms / 1,000 ms |
| コード長 | 2,083 bytes |
| コンパイル時間 | 18,238 ms |
| コンパイル使用メモリ | 457,396 KB |
| 実行使用メモリ | 54,776 KB |
| スコア | 18,105,840 |
| 最終ジャッジ日時 | 2024-02-25 17:04:49 |
| 合計ジャッジ時間 | 33,110 ms |
|
ジャッジサーバーID (参考情報) |
judge11 / judge13 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
import java.util.*
import kotlin.math.*
fun main(){
val N = readLine()!!.toInt()
val cardList = mutableListOf<Pair<Long,Long>>()
repeat(N){
val (a,b) = readLine()!!.split(" ").map{it.toLong()}
cardList.add(Pair(a,b))
}
val c = 500000000000000000L
val rlist = mutableListOf<Pair<Int,Double>>()
var zIdx = -1
for(i in 0..N-1){
val fValue = abs(cardList[i].first-c).toDouble()
val bValue = abs(cardList[i].second-c).toDouble()
rlist.add(Pair(i,sqrt(fValue*fValue+bValue*bValue)))
}
rlist.sortBy{it.second}
for(i in 0..N-1){
if(rlist[i].first==0)zIdx=i
}
val ansList = mutableListOf<Pair<Int,Int>>()
val g = cardList.toMutableList()
val zFront = g[0].first.toDouble()
val zBack = g[0].second.toDouble()
val baseDist = sqrt(zFront*zFront+zBack*zBack)
for(i in 0..(N-1)/2-1){
if(2*i+1<zIdx)continue
val xFront = g[rlist[2*i].first].first.toDouble()
val xBack = g[rlist[2*i].first].second.toDouble()
val yFront = g[rlist[2*i+1].first].first.toDouble()
val yBack = g[rlist[2*i+1].first].second.toDouble()
val nFront = (xFront+yFront)/2.0
val nBack = (xBack+yBack)/2.0
val newDist = sqrt(nFront*nFront+nBack*nBack)
if(newDist<baseDist){
ansList.add(Pair(rlist[2*i].first,rlist[2*i+1].first))
val nPair = Pair(nFront.toLong(),nBack.toLong())
g[rlist[2*i].first]=nPair
g[rlist[2*i+1].first]=nPair
}
}
val slist = mutableListOf<Pair<Int,Double>>()
for(i in 0..N-1){
val fValue = abs(g[i].first-c).toDouble()
val bValue = abs(g[i].second-c).toDouble()
slist.add(Pair(i,sqrt(fValue*fValue+bValue*bValue)))
}
slist.sortBy{it.second}
val stack = ArrayDeque<Int>()
var count = ansList.size
for(i in 0..N-1){
if(count>=50)break
if(slist[i].first==0)break
stack.add(slist[i].first)
count++
}
for(i in 0..stack.size-1){
val p = stack.removeLast()
ansList.add(Pair(0,p))
}
println(ansList.size)
for(i in 0..ansList.size-1){
val u = ansList[i].first+1
val v = ansList[i].second+1
println("$u $v")
}
}
clam010