Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experiment.

Amr has n different types of chemicals. Each chemical i has an initial volume of ai liters. For this experiment, Amr has to mix all the chemicals together, but all the chemicals volumes must be equal first. So his task is to make all the chemicals volumes equal.

To do this, Amr can do two different kind of operations.

  • Choose some chemical i and double its current volume so the new volume will be 2ai
  • Choose some chemical i and divide its volume by two (integer division) so the new volume will be

Suppose that each chemical is contained in a vessel of infinite volume. Now Amr wonders what is the minimum number of operations required to make all the chemicals volumes equal?

Input

The first line contains one number n (1 ≤ n ≤ 105), the number of chemicals.

The second line contains n space separated integers ai (1 ≤ ai ≤ 105), representing the initial volume of the i-th chemical in liters.

Output

Output one integer the minimum number of operations required to make all the chemicals volumes equal.

Example

Input
3
4 8 2
Output
2
Input
3
3 5 6
Output
5

Note

In the first sample test, the optimal solution is to divide the second chemical volume by two, and multiply the third chemical volume by two to make all the volumes equal 4.

In the second sample test, the optimal solution is to divide the first chemical volume by two, and divide the second and the third chemical volumes by two twice to make all the volumes equal 1.

题目分析 :

  给你 n 个数,有两种操作可以执行,一是将此数扩大 2 倍, 二是将此数变为 一半。

思路分析 :

  最初想的是 广搜, n 个数, 数据范围是 1e5 ,每次乘以 2 ,总的操作数加起来也没有多少,所以对每个数都进行广搜,但是如果只是单纯这么写一直都是超时,后来一位 丁学长指导了下, 每次记步数的数组清空只清空之前用过的地方,这个地方一优化题目就直接过了。

const int eps = 1e5+5;
const double pi = acos(-1.0);
const int inf = 1<<29;
#define Max(a,b) a>`b?a:b
#define Min(a,b) a>b?b:a
#define ll long long int pre[eps];
int bu[eps];
int pt[eps];
int p[eps]; queue<int>que;
stack<int>s;
int maxn = 0x3f3f3f3f;
void bfs(int num){
while(!que.empty()) que.pop(); que.push(num);
p[num] = 0;
s.push(num);
while(!que.empty()) {
int x = que.front();
que.pop(); int x1 = x / 2;
int x2 = x*2;
if (x1 >= 1 && x1 <= maxn && p[x1] == -1) {
p[x1] = p[x] + 1;
que.push(x1);
bu[x1] += p[x1];
pt[x1]++;
s.push(x1);
}
if (x2 <= eps && x2 <= maxn && p[x2] == -1){
que.push(x2);
p[x2] = p[x] + 1;
bu[x2] += p[x2];
pt[x2]++;
s.push(x2);
}
}
} int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n; cin >> n; for(int i = 1; i <= n; i++){
scanf("%d", &pre[i]);
maxn = max(maxn, pre[i]);
}
memset(p, -1, sizeof(p));
for(int i = 1; i <= n; i++){
pt[pre[i]]++;
bfs(pre[i]);
while(!s.empty()) {
int x = s.top();
s.pop();
p[x] = -1;
}
}
int ans = 0x3f3f3f3f;
for(int i = 1; i <= 100000; i++){
if (pt[i] == n) {
ans = min(ans, bu[i]);
}
}
printf("%d\n", ans);
return 0;
}

题目还有种方法就是直接暴力,队于每个数如果它是奇数,你除以 2 在乘以 2 ,会得到一组新的不同的数,但是如果是偶数的此过程就没有意义。

const int eps = 1e5+5;
const double pi = acos(-1.0);
const int inf = 1<<29;
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a
#define ll long long int pre[eps];
int bu[eps];
int cnt[eps]; void fun(int x) { int p = x;
int k = 0;
while(p <= 100000){
cnt[p]++;
bu[p] += k++;
p *= 2;
}
p = x;
k = 0; while(p > 1) {
int f = p/2;
k++;
cnt[f]++;
bu[f] += k; if (p & 1) {
int ff = f*2;
int kk = k+1;
while(ff <= 100000){
cnt[ff]++;
bu[ff] += kk++;
ff *= 2;
}
}
p /= 2;
}
} int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n;
cin >> n; for(int i = 1; i <= n; i++){
scanf("%d", &pre[i]);
}
for(int i = 1; i <= n; i++){
fun(pre[i]);
}
int ans = 0x3f3f3f3f; for(int i = 1; i <= 100000; i++){
if (cnt[i] == n) {
ans = min(ans, bu[i]);
}
}
printf("%d\n", ans);
return 0;
}

CF 558 C的更多相关文章

  1. CF 558 C. Amr and Chemistry 暴力+二进制

    链接:http://codeforces.com/problemset/problem/558/C C. Amr and Chemistry time limit per test 1 second ...

  2. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  3. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  4. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  5. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  6. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  7. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  8. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

  9. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

随机推荐

  1. POJ 1797 Heavy Transportation(Dijkstra运用)

    Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can no ...

  2. TOJ 6121: 学长的情书 ( 二分)

    传送门: 点我 6121: 学长的情书  时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte总提交: 79            测试通过:2 描述 抹布收 ...

  3. H3C配置热键--hotkey---系统视图

    Hotkey作用 hotkey 命令用来为某一快捷键指定相应的命令行. undo hotkey 命令用来恢复系统的默认值. —————————————————————————————————————— ...

  4. oracle 包 简单使用

    理解PL/SQL包 简介 包(package)的主要作用是用于逻辑组合相关的PL/SQL类型 比如记录类型或者集合类型,PL/SQL游标或游标声明以及PL/SQL子程序 还可以包含任何可以在块的声明区 ...

  5. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总,使用mono运行filddler

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  6. centos7 断电导致 generating /run/initramfs/rdsosreport.txt 问题

    开机就进入命令窗口,窗口提示信息如下: generating “/run/initramfs/rdsosreport.txt” entering emergencymode. exit the she ...

  7. DEVOPS技术实践_16:使用Centos容器作为salve的报错offline的问题

    上一篇创建了一个centos的容器,而且已经安装了openssh [root@node6 ~]# docker ps -a f2320c5d3c54 centos minutes ago Exited ...

  8. 20191121-8 Scrum立会报告+燃尽图 04

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/10068 一: 组名:组长组 组长:杨天宇 组员:魏新  罗杨美慧  王歆瑶 ...

  9. Python 元类的基本介绍及使用

    一.什么是元类 二.如何使用元类 (一)不依赖class关键字创建一个自定义类 (二)自定义元类控制类的产生 (三)自定义元类控制类的调用 一.什么是元类 在python中,一切皆对象,而对象都是由类 ...

  10. 分布式事务框架-seata初识

    一.事务与分布式事务 事务,在数据库中指的是操作数据库的最小单位,往大了看,事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消. 那为什么会有分布式事务呢 ...