結果
問題 |
No.2759 Take Pictures, Elements?
|
ユーザー |
![]() |
提出日時 | 2025-04-20 00:41:59 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 91 ms / 2,000 ms |
コード長 | 918 bytes |
コンパイル時間 | 14,363 ms |
コンパイル使用メモリ | 252,368 KB |
実行使用メモリ | 12,216 KB |
最終ジャッジ日時 | 2025-06-20 13:22:23 |
合計ジャッジ時間 | 15,635 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
package main import . "fmt" func main() { var n,q int Scan(&n,&q) a := make([]int, n) for i := range a { Scan(&a[i]) } b := make([]int, q) for i := range b { Scan(&b[i]) } ans := solve(n, q, a, b) Println(ans) } func solve(n, q int, a, b []int) int { m := make(map[int][]int) for i, x := range a { m[x] = append(m[x], i) } dp := make([][]int, q+1) for i := range dp { dp[i] = make([]int, n) for j := range dp[i] { dp[i][j] = 1e15 } } dp[0][0] = 0 cur := []int{0} for i, x := range b { if a[cur[0]] == x { dp[i+1] = dp[i] continue } next := m[x] for _, from := range cur { cost := dp[i][from] for _, to := range next { dp[i+1][to] = min(dp[i+1][to], cost+abs(from-to)) } } cur = next } var ans int = 1e15 for _, i := range cur { ans = min(ans, dp[q][i]) } return ans } func abs(x int) int { if x < 0 { return -x } else { return x } }