有n種不同的化學試劑。第i種有ai公升。每次實驗都要把所有的化學試劑混在一起,但是這些試劑的量一定要相等。所以現在的首要任務是把這些化學試劑的量弄成相等。
有兩種操作:
把第i種的量翻倍,即第i種的量變成2ai。
把第i種的量減半,除的時候向下取整,即把第i種的量變成 ⌊ ai/2 ⌋ 。
現在所有的化學試劑的量已知,問最少要變換多少次,這些化學試劑的量才會相等。
樣例解釋:把8變成4,把2變成4。這樣就需要兩次就可以了。
輸入單組測試資料。
第一行有乙個整數n (1 ≤ n ≤ 10^5),表示化學物品的數量。
第二行有n個以空格分開的整數ai (1 ≤ ai ≤ 10^5),表示第i種化學試劑的量。
輸出輸出乙個數字,表示最少的變化次數。
輸入樣例
34 8 2
輸出樣例
2暴力把每個數可以達到的數的步數都記錄下來
求最小需要注意的:
1:保證每個數都可達到這個數
2:奇數/2後 x2可或者原奇數×2所達不到的數,且不會重複
#include.h>
using namespace std;
#define ll long long
int v[
200100
],num[
200100];
void f
(int x,
int step)
return;}
intmain()
}for
(int i=
1;i<=
100000
;i++)if
(v[i]
==n)
ans=
min(ans,num[i]);
cout
}
1483 化學變換 暴力
基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 收藏關注有n種不同的化學試劑。第i種有ai公升。每次實驗都要把所有的化學試劑混在一起,但是這些試劑的量一定要相等。所以現在的首要任務是把這些化學試劑的量弄成相等。有兩種操作 把第i種的量翻倍,即第i種的量變成2ai。...
51Nod 1483 化學變換(思維 暴力)
思維題 找出每個數通過乘二除二所能得到的所有的數,並且記錄得到這個數乘二除二的次數和有多少個數能轉換為這個數 include include include using namespace std const int maxn 200005 const int inf 0x3f3f3f3f int ...
51Nod 1483 化學變換 暴力 列舉
題目 有n種不同的化學試劑。第i種有ai公升。每次實驗都要把所有的化學試劑混在一起,但是這些試劑的量一定要相等。所以現在的首要任務是把這些化學試劑的量弄成相等。有兩種操作 把第i種的量翻倍,即第i種的量變成2ai。把第i種的量減半,除的時候向下取整。現在所有的化學試劑的量已知,問最少要變換多少次,這...