題意:給n個數,每個數每次可以乘二或除以二(向下取整相當於左移或右移),問最少經過多少次操作可以使這n個數變相等。
思路:首先考慮每個數的可能取值,將一個數表示成s*2^k的形式,s是奇數。
那麼這個數的所有可能取值為s'*2^x,(s'=s/2,(s/2)/2,.....)且s'*2^x<=100000
因為這題數據范圍不大,而且每個值可能的取值不多最多幾百個,所以記錄1到100000每個值可能被取到的次數以及總操作數,最後從1遍歷到100000取最小的ans即可
ps:個人賽這道題做了一下午無數亂搞寫的代碼巨惡心......晚上回來優化了一下勉強能看..........
#include
#include
#include
#include
#include
#include
#include
#include
??