結果
問題 |
No.130 XOR Minimax
|
ユーザー |
|
提出日時 | 2016-02-06 08:36:19 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 96 ms / 5,000 ms |
コード長 | 975 bytes |
コンパイル時間 | 12,166 ms |
コンパイル使用メモリ | 235,144 KB |
実行使用メモリ | 9,988 KB |
最終ジャッジ日時 | 2024-09-12 22:39:15 |
合計ジャッジ時間 | 14,279 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
// maskの計算をシフト演算にしたら速くなった。 package main import ( "bufio" "fmt" "os" "strconv" ) func calc(a []int, b int) int { if b < 0 { return a[0] } mask := 1 << (uint(b)) p0 := make([]int, 0) p1 := make([]int, 0) for i := 0; i < len(a); i++ { num := a[i]; if num & mask == 0 { p0 = append(p0, num) } else { p1 = append(p1, num) } } if len(p0) == 0 { for i := 0; i < len(p1); i++ { p1[i] ^= mask; } return calc(p1, b - 1) } else if len(p1) == 0 { return calc(p0, b - 1) } else { for i := 0; i < len(p0); i++ { p0[i] ^= mask; } v1 := calc(p0, b - 1) v2 := calc(p1, b - 1) if v1 < v2 { return v1 } else { return v2 } } } func main() { sc := bufio.NewScanner(os.Stdin) sc.Split(bufio.ScanWords) sc.Scan(); n, _ := strconv.Atoi(sc.Text()) a := make([]int, n) for i := 0; i < n; i++ { sc.Scan(); num, _ := strconv.Atoi(sc.Text()) a[i] = num } fmt.Println(calc(a, 30)) }