SwiftでAtCoder Beginner Contest 228の「C - Final Day」を解きました。
問題内容
問題文
N 人の生徒が 4 日間にわたる試験を受けています。
それぞれの日に行われる試験は 300 点満点です。すなわち、4 日間を通した試験の満点は 1200 点です。
現在 3 日目までの試験が終わり、これから 4 日目の試験が行われようとしています。i(1≤i≤N) 番目の生徒は j(1≤j≤3) 日目の試験で P i,j点獲得しました。
それぞれの生徒について、4 日目の試験後に上位 K 位以内に入っていることがあり得るかどうか判定してください。
ただし、4 日目の試験後の生徒の順位は、その生徒よりも 4 日間の合計点が高い生徒の人数に 1 を加えた値として定めます。
解答コード
func abc228C(){
let array = readLine()!.split(separator:" ").map{Int($0)!}
let n = array[0]
let k = array[1]
var result : [Int] = []
for _ in 0..<n{
result.append(readLine()!.split(separator:" ").map{Int($0)!}.reduce(0, +))
}
var result_ = result
result_ = result_.sorted(by: >)
let limit = result_[k - 1] - 300
for i in result{
if i >= limit{
print("Yes")
}
else{
print("No")
}
}
}
abc228C()
現時点での全員の点数を配列にして高い順に並び替え、K位(配列のK番目)の人の点数 - 300点未満の人にはNO
、それ以外の人にはYes
を出力しています。
Swiftのお役立ち情報