結果
| 問題 | No.3300 Frog Game |
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2026-04-17 00:14:51 |
| 言語 | Go (1.26.1) |
| 結果 |
AC
|
| 実行時間 | 403 ms / 2,000 ms |
| コード長 | 2,567 bytes |
| 記録 | |
| コンパイル時間 | 10,392 ms |
| コンパイル使用メモリ | 279,472 KB |
| 実行使用メモリ | 7,680 KB |
| 最終ジャッジ日時 | 2026-04-17 00:15:17 |
| 合計ジャッジ時間 | 25,847 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 35 |
ソースコード
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 {
// 解法わからなかったので
// 解説読んだ
// だがわからない
x := (n - 2) % (a + b)
return (x >= b) || (x / a) % 2 == 1
}
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))
}
ID 21712