結果
| 問題 | 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
}
            
            
            
        