🚀
AtCoder Beginner Contest 391(3)
C問題
何に注目するかが難しく感じました。
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
var n, q int
fmt.Scan(&n, &q)
reader := bufio.NewReaderSize(os.Stdin, 1<<20)
// 鳩の居場所 1~n
pos := make([]int, n+1)
for i := 1; i <= n; i++ {
pos[i] = i
}
// 巣の中の数 1~n
cnt := make([]int, n+1)
for i := 1; i <= n; i++ {
cnt[i] = 1
}
ans := 0
// クエリを受け取る
for i := 0; i < q; i++ {
line, _ := reader.ReadString('\n')
line = strings.TrimSpace(line)
s := strings.Split(line, " ")
// クエリが1の時
if s[0] == "1" {
// どの鳩か
p, _ := strconv.Atoi(s[1])
// どの巣に移動するか
h, _ := strconv.Atoi(s[2])
if cnt[pos[p]] == 2 {
// 一羽しかいない場合は、巣の中の数を更新
ans--
}
// 鳩の居場所を更新
cnt[pos[p]]--
pos[p] = h
cnt[pos[p]]++
if cnt[pos[p]] == 2 {
ans++
}
}
// クエリが2の時
if s[0] == "2" {
fmt.Println(ans)
}
}
}
Discussion