Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- )
- func min(a int, b int) int {
- if a < b { return a }
- return b
- }
- func f(a []int, bit int) int {
- if (bit < 0) { return 0 }
- mask := 1 << uint(bit)
- var ones, zero []int
- for _, v := range a {
- if (mask & v) != 0 {
- ones = append(ones, v)
- } else {
- zero = append(zero, v)
- }
- }
- if len(ones) == 0 { return f(zero, bit - 1) }
- if len(zero) == 0 { return f(ones, bit - 1) }
- return mask + min(f(ones, bit - 1),
- f(zero, bit - 1));
- }
- func main() {
- var n int
- fmt.Scanf("%d", &n)
- a := make([]int, n)
- for i := 0; i < n; i++ {
- fmt.Scanf("%d", &a[i])
- }
- fmt.Printf("%d\n", f(a, 30))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement