結果
問題 |
No.2057 Ising Model
|
ユーザー |
![]() |
提出日時 | 2025-05-12 00:58:48 |
言語 | Go (1.23.4) |
結果 |
WA
|
実行時間 | - |
コード長 | 890 bytes |
コンパイル時間 | 16,262 ms |
コンパイル使用メモリ | 248,796 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-05-12 00:59:08 |
合計ジャッジ時間 | 16,556 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 WA * 3 |
ソースコード
package main import . "fmt" func main() { var n,a,b int Scan(&n,&a,&b) ans:=solve(n,a,b) Println(ans) } func solve(n, a, b int) int { if n < 20 { return bruteforce(n, a, b) } return min(a*(n-1)-b*n,-a*(n-1)-b*(n%2)) } func init() { check() } func check() { for n := 10; n < 13; n++ { for a := n-2; a <= n+2; a++ { for b := n-2; b <= n+2; b++ { ans1 := solve(n,a,b) ans2 := bruteforce(n, a, b) if ans1 != ans2 { panic(Sprintf("n=%d,a=%d,b=%d,ans1=%d,ans2=%d",n,a,b,ans1,ans2)) } } } } } func bruteforce(n, a, b int) int { if n > 20 { panic("N > 20") } ans := a*(n-1) - b * n for i := 0; i < (1<<n); i++ { tmp := 0 for j := 0; j < n-1; j++ { s1 := 2*((i>>j)&1)-1 s2 := 2*((i>>(j+1))&1)-1 tmp += a * s1*s2 } for j := 0; j < n; j++ { s := 2*((i>>j)&1)-1 tmp -= b * s } ans = min(ans, tmp) } return ans }