結果
| 問題 |
No.2804 Fixer And Ratism
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-04-09 14:52:15 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 172 ms / 2,000 ms |
| コード長 | 1,082 bytes |
| コンパイル時間 | 12,065 ms |
| コンパイル使用メモリ | 231,836 KB |
| 実行使用メモリ | 8,004 KB |
| 最終ジャッジ日時 | 2025-04-09 14:52:32 |
| 合計ジャッジ時間 | 15,945 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 31 |
ソースコード
package main
import . "fmt"
import . "os"
import bf "bufio"
import . "sort"
func main() {
rd := bf.NewReader(Stdin)
var n, q int
Fscan(rd, &n,&q)
members := make([]*Member, 0, n)
fa := map[string]*Member{}
for i := 0; i < q; i++ {
var t int
Fscan(rd, &t)
switch t {
case 1:
m := new(Member)
Fscan(rd, &m.name, &m.rating)
members = append(members, m)
fa[m.name] = m
case 2:
var dec int
Fscan(rd, &dec)
n -= dec
case 3:
var name string
var inc int
Fscan(rd, &name, &inc)
fa[name].goodjob = true
n += inc
}
if len(members) <= n {
continue
}
Slice(members, func(i, j int) bool {
m1, m2 := members[i], members[j]
if m1.goodjob != m2.goodjob {
return m2.goodjob
} else {
return m1.rating < m2.rating
}
})
gone := len(members)-n
Slice(members[:gone], func(i, j int) bool {
return members[i].rating < members[j].rating
})
for _, m := range members[:gone] {
Println(m.name)
}
members = members[gone:]
}
}
type Member struct {
name string
rating int
goodjob bool
}
ID 21712