第一题
func minimumSwitchingTimes(source [][]int, target [][]int) int {
    have := make(map[int]int)
	for i := 0; i < len(source); i++ {
        for j := 0; j < len(source[i]); j++ {
            have[source[i][j]]++
        }
    }
    need:=make(map[int]int)
    for i := 0; i < len(target); i++ {
        for j := 0; j < len(target[i]); j++ {
            need[target[i][j]]++
        }
    }
    ans:=0
    for i, c := range need {
        if have[i] >= c{
            continue
        }
        ans+= c-have[i]
    }
    return ans
}
第二题
func maxmiumScore(cards []int, cnt int) int {
	var odd, even []int
	for i := 0; i < len(cards); i++ {
		if cards[i]&1 == 1 {
			odd = append(odd, cards[i])
		} else {
			even = append(even, cards[i])
		}
	}
	sort.Ints(even)
	sort.Ints(odd)
	ans := 0
	if cnt&1 == 1 {
		if len(even) == 0 {
			return 0
		}
		ans += even[len(even)-1]
		even = even[:len(even)-1]
		cnt--
	}

	var i, j = len(even)-1, len(odd)-1
	for cnt > 0 {
		if i < 1 && j >= 1 {
			ans += odd[j] + odd[j-1]
			j -= 2
		} else if i >= 1 && j < 1 {
			ans += even[i] + even[i-1]
			i -= 2
		}else{
			if i<1 && j<1{
				return 0
			}
			if odd[j] + odd[j-1]> even[i] + even[i-1]{
				ans += odd[j] + odd[j-1]
				j -= 2
			}else{
				ans += even[i] + even[i-1]
				i -= 2
			}
		}
		cnt -= 2
	}
	return ans
}
第三题
type myHeap struct {
	arr []int
}

func (m *myHeap) Len() int {
	return len(m.arr)
}

func (m *myHeap) Less(i, j int) bool {
	return m.arr[i] > m.arr[j]
}

func (m *myHeap) Swap(i, j int) {
	m.arr[i], m.arr[j] = m.arr[j], m.arr[i]
}

func (m *myHeap) Push(x interface{}) {
	m.arr = append(m.arr, x.(int))
}

func (m *myHeap) Pop() interface{} {
	top := m.arr[len(m.arr)-1]
	m.arr = m.arr[:len(m.arr)-1]
	return top
}
func magicTower(nums []int) int {
	rest := 0
	mh := &myHeap{}
	hp := 1
	limit := 0
	for i := 0; i < len(nums); i++ {
		hp += nums[i]
		if nums[i] < 0 {
			heap.Push(mh, -nums[i])
		}
		if hp <= 0 {
			limit++
			add := heap.Pop(mh).(int)
			hp += add
			rest += add
		}
	}
	if hp <= rest {
		return -1
	}
	return limit
}
第四题
func circleGame(toys [][]int, circles [][]int, r int) int {
	sort.Slice(circles, func(i, j int) bool {
		return circles[i][0] < circles[j][0]
	})
	ans := 0
	for i := 0; i < len(toys); i++ {
		if toys[i][2]>r{
			continue
		}
		l, h := 0, len(circles)
		for l < h {
			m := (l + h) / 2
			if toys[i][0]-toys[i][2] <= circles[m][0]+r {
                h = m
			} else {
                l = m + 1
			}
		}
		for j:= l; j < len(circles); j++ {
			if toys[i][0]-toys[i][2] < circles[j][0]-r {
				break
			}
			if in(toys[i], circles[j], r) {
				ans++
                break
			}
		}
	}
	return ans
}

func in(x, y []int, r int) bool {
	return (x[0]-y[0])*(x[0]-y[0])+(x[1]-y[1])*(x[1]-y[1]) <= (r-x[2])*(r-x[2])
}