51Nod 1483 化學變換 暴力 列舉

2021-09-10 19:43:32 字數 1036 閱讀 3318

題目

有n種不同的化學試劑。第i種有ai公升。每次實驗都要把所有的化學試劑混在一起,但是這些試劑的量一定要相等。所以現在的首要任務是把這些化學試劑的量弄成相等。有兩種操作:把第i種的量翻倍,即第i種的量變成2ai。把第i種的量減半,除的時候向下取整。現在所有的化學試劑的量已知,問最少要變換多少次,這些化學試劑的量才會相等。樣例解釋:把8變成4,把2變成4。這樣就需要兩次就可以了。

輸入

單組測試資料。第一行有乙個整數n (1 ≤ n ≤ 10^5),表示化學物品的數量。第二行有n個以空格分開的整數ai (1 ≤ ai ≤ 10^5),表示第i種化學試劑的量。

輸出

輸出乙個數字,表示最少的變化次數。

樣例輸入

3

4 8 2

樣例輸出

2
分析

列舉每個數能變換成的數,以及變換需要的步數,如果n個數都能變成某個數,更新答案即可,具體看程式。

c++程式

#includeusing namespace std;

const int n=100005;

int count[n];//count[i]記錄能通過乘2或除2變成i的數的個數

int ans[n];//ans[i]統計n個數變成i總共需要的步數

void convert(int n,int step)

x/=2;

} res+=(++step);//統計各個數變成0的步數

} for(int i=1;iif(count[i]==n)//如果n個數都能變換為i,則更新答案

res=min(res,ans[i]);

printf("%d\n",res);

return 0;

}

51Nod 1483 化學變換(思維 暴力)

思維題 找出每個數通過乘二除二所能得到的所有的數,並且記錄得到這個數乘二除二的次數和有多少個數能轉換為這個數 include include include using namespace std const int maxn 200005 const int inf 0x3f3f3f3f int ...

51nod 1483 化學變換

思路 統計每個所能到達的數和步數,奇數需要特別處理下 哎,模擬能力有待提高 include 因為範圍 2 1e5 列舉每個數能到達的範圍,奇數要特別處理一下 include include include include include include include include include...

51nod1483 化學變換

1483 化學變換 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有n種不同的化學試劑。第i種有ai公升。每次實驗都要把所有的化學試劑混在一起,但是這些試劑的量一定要相等。所以現在的首要任務是把這些化學試劑的量弄成相等。有兩種操作 把第i種...