题意
每次操作可以给数组里的某个元素除以2,向下取整,问最少需要多少次操作可以使得所有元素相等
思路
感觉这个题的数据范围应该没有很强,算是水过去了
枚举了a[i]所以可以变成的值,其中mp[x]表示可以变成x的数的个数,cnt[x]表示变成x全部所需要的操作数。
最后在所有mp[x]=n的值里,取一个cnt[x]的最小值
Go代码
package main import ( "fmt" "math" "sort" ) func min(a,b int) int { if a < b { return a } return b } func main() { var n int fmt.Scan(&n) a := make([]int,n) for i := 0; i < n; i ++ { fmt.Scan(&a[i]) } sort.Ints(a) mp := make(map[int]int,n)//记录x的个数 cnt := make(map[int]int,n) //记录变成x需要的次数 for i := 0; i < n; i ++ { now := 0 for a[i] > 0 { mp[a[i]]++ cnt[a[i]] += now now ++ a[i] /= 2 } } ans := math.MaxInt for k,v := range cnt { if mp[k] != n { continue } ans = min(ans,v) } fmt.Print(ans) }