結果

問題 No.3300 Frog Game
コンテスト
ユーザー ID 21712
提出日時 2026-01-18 19:11:20
言語 Go
(1.25.5)
結果
WA  
実行時間 -
コード長 2,809 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 12,595 ms
コンパイル使用メモリ 241,368 KB
実行使用メモリ 7,852 KB
最終ジャッジ日時 2026-01-18 19:11:35
合計ジャッジ時間 14,032 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 20 WA * 15
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

package main

import . "fmt"

var dump = false

func init() {
	// check()
	dump = true
	// check2()
	// check3()
	dump = false
}

func main() {
	var n, a, b int
	Scan(&n,&a,&b)
	defer func() {
		if recover() != nil {
			if solve(n, a, b) {
				Println("sepa")
			} else {
				Println("ryota")
			}
		}	
	}()
	if dpsol(n, a, b) {
		Println("sepa")
	} else {
		Println("ryota")
	}
}

func solve(n, a, b int) bool {
	n--
	if a >= n  {
		return false
	}
	if a+a >= n {
		return true
	}
	if b >= n {
		return (n / a) % 2 == 0
	}
	if a+b >= n {
		return true
	}
	aa := (n + a - 1) / a
	bb := n / b
	if n % b == 0 {
		bb += (b + a - 1) / a - 1
	} else {
		bb += (n % b + a - 1) / a
	}
	if aa % 2 == bb % 2 {
		return aa % 2 == 0
	}
	ab := n / (a + b) + (n % (a + b) + a - 1) / a
	return ab % 2 == aa % 2
}

func dpsol(n, a, b int) bool {
	if 1+a >= n {
		return false
	}
	dp := make([]int, n+a+1)
	for i := 0; i < a; i++ {
		dp[n-a+i] = 1
	}
	for i := n; i > 1; i-- {
		if dp[i] == 0 {
			continue
		}
		if i-a > 0 {
			dp[i-a] = max(dp[i-a], 3-dp[i])
		}
		if i-b > 0 {
			dp[i-b] = max(dp[i-b], 3-dp[i])
		}
	}
	if dump {
		println(Sprintf("n=%d,a=%d,b=%d,ans=%v", n,a,b,dp[1]==2))
		println(tostr(dp))
	}
	return dp[1] == 2
}

func tostr(dp []int) string {
	bs := make([]byte, len(dp))
	for i, v := range dp {
		bs[i] = byte(v+'0')
	}
	return string(bs)
}

func check() {
	ac, wa := 0, 0
	for n,m := 1, 2; n < 1e5; n,m = m,n+m {
		for a := 1; a <= 30 && a+1 < n; a++ {
			for b := a+1; b < n && b < a*30; b += a+1 {
				result := dpsol(n, a, b)
				answer := solve(n, a, b)
				if result == answer {
					ac++
				} else {
					wa++
					if wa == 1 {
						println(Sprintf("n=%d,a=%d,b=%d",n,a,b))
						println(Sprintf("result=%v", result))
						println(Sprintf("answer=%v", answer))
					}
				}
			}
		}
	}
	println(Sprintf("AC=%d,WA=%d",ac, wa))
}

func check2() {
	ns := []int{103}
	ac, wa := 0, 0
	for _, n := range ns {
		for a := 1; a < 12; a++ {
			for b := a+a; b < 10*a; b += a+a {
				result := dpsol(n, a, b)
				answer := solve(n, a, b)
				if result == answer {
					ac++
				} else {
					wa++
					if wa == 1 {
						println(Sprintf("n=%d,a=%d,b=%d",n,a,b))
						println(Sprintf("result=%v", result))
						println(Sprintf("answer=%v", answer))
					}
				}
			}
		}
	}
	println(Sprintf("AC=%d,WA=%d",ac, wa))
}

func check3() {
	ns := []int{103}
	ac, wa := 0, 0
	for _, n := range ns {
		for a := 1; a < 12; a++ {
			for b := a+a+a; b < 10*a; b += a+a {
				result := dpsol(n, a, b)
				answer := solve(n, a, b)
				if result == answer {
					ac++
				} else {
					wa++
					if wa == 1 {
						println(Sprintf("n=%d,a=%d,b=%d",n,a,b))
						println(Sprintf("result=%v", result))
						println(Sprintf("answer=%v", answer))
					}
				}			
			}
		}
	}
	println(Sprintf("AC=%d,WA=%d",ac, wa))
}
0