結果
| 問題 |
No.1708 Quality of Contest
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-01-25 15:56:22 |
| 言語 | Scala(Beta) (3.6.2) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,811 bytes |
| コンパイル時間 | 12,861 ms |
| コンパイル使用メモリ | 266,568 KB |
| 実行使用メモリ | 113,200 KB |
| 最終ジャッジ日時 | 2024-12-16 06:15:56 |
| 合計ジャッジ時間 | 59,708 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 TLE * 16 |
ソースコード
import java.io.BufferedReader
import scala.annotation.tailrec
import scala.collection.mutable
import scala.io.{Source, StdIn}
import scala.io.StdIn.*
inline def readLine()(using reader: BufferedReader): String =
reader.readLine()
@main def main =
given reader: BufferedReader = Source.stdin.bufferedReader()
val Array(n, m, x) = readLine().split(' ').map(_.toInt)
val problem = Array.fill(n) {
val Array(a, b) = readLine().split(' ').map(_.toInt)
(a, b - 1)
}
val k = readLine().toInt
val contestant = readLine().split(' ').map(_.toInt)
val sortedWithQuality = (0 until n).sorted(Ordering.by[Int, Int](problem(_)._1).reverse).toArray
var all = 0
var newGenre = 0
val useGenre = Array.fill(m){false}
val useProblem = Array.fill(n){false}
val contestantCount = Array.fill(n + 1){0}
for c <- contestant do
contestantCount(c) += 1
var rest = k.toLong - contestantCount(0)
var result = 0L
for i <- 1 to n do
while newGenre < n && useGenre(problem(sortedWithQuality(newGenre))._2) do
newGenre += 1
while all < n && useProblem(sortedWithQuality(all)) do
all += 1
if newGenre == n then
val h = sortedWithQuality(all)
useProblem(h) = true
result += problem(h)._1 * rest
else if all == n then
val h = sortedWithQuality(newGenre)
useProblem(h) = true
useGenre(problem(h)._2) = true
result += (problem(h)._1 + x) * rest
else
val hi = sortedWithQuality(newGenre)
val hj = sortedWithQuality(all)
if problem(hi)._1 + x < problem(hj)._1 then
useProblem(hj) = true
result += problem(hj)._1 * rest
else
useProblem(hi) = true
useGenre(problem(hi)._2) = true
result += (problem(hi)._1 + x) * rest
rest -= contestantCount(i)
println(result)