結果
| 問題 |
No.769 UNOシミュレータ
|
| コンテスト | |
| ユーザー |
one_meets_seven
|
| 提出日時 | 2019-01-04 04:30:35 |
| 言語 | Go (1.23.4) |
| 結果 |
WA
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,245 bytes |
| コンパイル時間 | 15,856 ms |
| コンパイル使用メモリ | 222,940 KB |
| 実行使用メモリ | 5,504 KB |
| 最終ジャッジ日時 | 2024-11-22 09:05:42 |
| 合計ジャッジ時間 | 14,795 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 WA * 1 |
ソースコード
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
run()
}
type state struct {
n int
players map[int]int
who int
prevDraw int
prev string
d int
}
func (s *state) next() {
s.who = (s.who + s.d + s.n) % s.n
}
func (s *state) put() {
s.players[s.who]++
}
func (s *state) draw() {
s.players[s.who] -= s.prevDraw
s.prevDraw = 0
}
func run() {
setSpace()
n := readN()
m := readN()
s := &state{
n: n,
players: make(map[int]int, n),
d: 1,
}
for i := 0; i < m; i++ {
card := read()
if s.prev != card && strings.HasPrefix(s.prev, "draw") {
s.draw()
s.next()
}
s.put()
switch card {
case "drawtwo":
s.prevDraw += 2
case "drawfour":
s.prevDraw += 4
case "skip":
s.next()
case "reverse":
s.d *= -1
}
s.prev = card
s.next()
}
// 一人前に戻る
s.who = (s.who - s.d + s.n) % s.n
fmt.Printf("%d %d\n", s.who+1, s.players[s.who])
}
var sc = bufio.NewScanner(os.Stdin)
func setSpace() {
sc.Split(bufio.ScanWords)
}
func setLine() {
sc.Split(bufio.ScanLines)
}
func read() string {
sc.Scan()
return sc.Text()
}
func readN() int {
n, err := strconv.Atoi(read())
if err != nil {
panic(err)
}
return n
}
one_meets_seven