結果
| 問題 |
No.3299 K-th MMA String
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-10-20 02:39:12 |
| 言語 | Go (1.23.4) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,906 bytes |
| コンパイル時間 | 12,444 ms |
| コンパイル使用メモリ | 234,056 KB |
| 実行使用メモリ | 7,768 KB |
| 最終ジャッジ日時 | 2025-10-20 02:39:27 |
| 合計ジャッジ時間 | 13,730 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 9 WA * 11 |
ソースコード
package main
import . "fmt"
import . "math/big"
func main() {
var n,k int
Scan(&n,&k)
s := make([]byte, n)
for i := range s {
s[i] = 'A'
}
Zero := NewInt(0)
One := NewInt(1)
dp := make([][3][2]*Int, n+1)
const (
A int = iota
MA
MM
)
const (
ALL int = iota
MMA
)
for i := 0; i < 3; i++ {
for j := 0; j < 2; j++ {
dp[n][i][j] = Zero
}
}
dp[n][A][ALL] = One
dp[n][MM][ALL] = One
p, c := 0, 0
all := false
next := A
for i := n-1; i >= 0; i-- {
dp[i][A][ALL] = new(Int).Add(dp[i+1][A][ALL], new(Int).Add(dp[i+1][MA][ALL], dp[i+1][MM][ALL]))
dp[i][A][MMA] = new(Int).Add(dp[i+1][A][MMA], new(Int).Add(dp[i+1][MA][MMA], dp[i+1][MM][MMA]))
count := dp[i][A][MMA].Int64()
if int(count) >= k {
println("A")
println(i)
println(count)
d := dp[i+1][MM][MMA].Int64()
if int(count-d) < k {
p, c = i+1, int(count)
next = MM
break
}
count -= d
d = dp[i+1][MA][MMA].Int64()
if int(count-d) < k {
p, c = i+1, int(count-d)
next = MA
break
}
p, c = i+1, int(count-d)
next = A
break
}
dp[i][MA][ALL] = dp[i+1][A][ALL]
dp[i][MA][MMA] = dp[i+1][A][MMA]
count += dp[i][MA][MMA].Int64()
if int(count) >= k {
println("MA")
println(i)
println(count)
s[i-1] = 'M'
p, c = i+1, int(count)
next = A
break
}
dp[i][MM][ALL] = new(Int).Add(dp[i+1][MA][ALL], dp[i+1][MM][ALL])
dp[i][MM][MMA] = new(Int).Add(dp[i+1][MA][ALL], dp[i+1][MM][MMA])
count += dp[i][MM][MMA].Int64()
if int(count) >= k {
println("MM")
println(i)
println(count)
s[i-1] = 'M'
if d := dp[i+1][MM][MMA].Int64(); int(count-d) < k {
p, c = i+1, int(count)
next = MM
} else {
s[i] = 'M'
p, c = i+2, int(count-d)
next = A
all = true
println(i)
}
break
}
}
for ; p < n; p++ {
if all {
switch next {
case A:
d := dp[p+1][MM][ALL].Int64()
if c-int(d) < k {
next = MM
} else {
c -= int(d)
d = dp[p+1][MA][ALL].Int64()
if c-int(d) < k {
next = MA
} else {
c -= int(d)
next = A
}
}
case MA:
s[p-1] = 'M'
next = A
case MM:
s[p-1] = 'M'
d := dp[p+1][MM][ALL].Int64()
if c-int(d) < k {
next = MM
} else {
c -= int(d)
s[p] = 'M'
next = A
p++
}
}
} else {
switch next {
case A:
d := dp[p+1][MM][MMA].Int64()
if c-int(d) < k {
next = MM
} else {
c -= int(d)
d = dp[p+1][MA][MMA].Int64()
if c-int(d) < k {
next = MA
} else {
c -= int(d)
next = A
}
}
case MA:
s[p-1] = 'M'
next = A
case MM:
s[p-1] = 'M'
d := dp[p+1][MM][MMA].Int64()
if c-int(d) < k {
next = MM
} else {
c -= int(d)
s[p] = 'M'
next = A
all = true
p++
}
}
}
}
Println(string(s))
}
ID 21712