Amr and Chemistry
C. Amr and Chemistry
1 second
256 megabytes
standard input
output
standard output
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?
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 one integer the minimum number of operations required to make all the chemicals volumes equal.
- 3
4 8 2
- 2
- 3
3 5 6
- 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(取整)或者乘2.每个整数可以进行任意次这样的操作。
使这n个整数都变为相同的整数最少需要多少次操作。
//暴力bfs 1292kb 607ms
//还是需要一点技巧的...
- #include <iostream>
- #include <stdio.h>
- #include <queue>
- #include <string.h>
- using namespace std;
- int n,max_;
- int num[];
- int times[];//有几个值可以到这个数
- int vis[];//所有值变成这个值需要的操作数
- struct Step
- {
- int e;//值
- int s;//步数
- };
- bool v[];//暂时用来bfs的
- void func(int x)
- {
- queue<Step> Q;
- memset(v,,sizeof(v));
- Step k;
- k.e=x;
- k.s=;
- Q.push(k);
- times[k.e]++;
- v[k.e]=;
- while (!Q.empty())
- {
- k=Q.front();
- Q.pop();
- Step next;
- next.e=k.e*;
- next.s=k.s+;
- if (next.e<=&&v[next.e]==)
- {
- vis[next.e]+=next.s;
- times[next.e]++;
- v[next.e]=;
- Q.push(next);
- }
- next.e=k.e/;
- if (next.e>=&&v[next.e]==)
- {
- vis[next.e]+=next.s;
- times[next.e]++;
- v[next.e]=;
- Q.push(next);
- }
- }
- }
- int main()
- {
- scanf("%d",&n);
- int i,j;
- for (i=;i<n;i++)
- scanf("%d",&num[i]);
- //memset(vis,0,sizeof(vis));
- //memset(times,0,sizeof(times));
- for (i=;i<n;i++)
- {
- func(num[i]);//每个点可以去的地方
- }
- int ans=1e8;
- for (i=;i<=;i++)
- {
- if (times[i]==n&&vis[i]<ans)//那个值必须要有n个数可以到,
- ans=vis[i];
- }
- printf("%d\n",ans);
- return ;
- }
更好的做法 984kb 46ms
//别人的,还未仔细看...
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- using namespace std;
- const int MAX = 1e5 + ;
- int num[MAX];
- int cnt[MAX];
- int a[MAX];
- const int up = 1e5;
- const int inf = 0x3f3f3f3f;
- int main()
- {
- int n;
- while(~scanf("%d", &n)){
- memset(num, , sizeof(num));
- memset(cnt, , sizeof(cnt));
- for(int i = ; i <= n ; i++)
- scanf("%d", &a[i]);
- for(int i = ; i <= n ; i++){
- int x = a[i];
- int pre = ;
- while(x){
- int s = ;
- while(x % == ){
- x /= ;
- s++;//从当前偶数到最后的奇数移动的步数
- }
- int y = x;
- int x1 = ;
- while(y <= up){
- cnt[y]++;//可以得到的值
- num[y] += pre + abs(s - x1);
- x1++;
- y *= ;
- }
- pre += s + ;//达到该值已经走过的步数,在接着处理一步+1
- x /= ;
- }
- }
- int ans = inf;
- for(int i = ; i <= up ;i++){
- if(cnt[i] == n){
- ans = min(ans, num[i]);
- }
- }
- printf("%d\n", ans);
- }
- return ;
- }
Amr and Chemistry的更多相关文章
- 暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry
C. Amr and Chemistry Problem's Link: http://codeforces.com/problemset/problem/558/C Mean: 给出n个数,让你通过 ...
- Codeforces Round #312 (Div. 2) C. Amr and Chemistry 暴力
C. Amr and Chemistry Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/558/ ...
- Codeforces Round #312 (Div. 2) C.Amr and Chemistry
Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experime ...
- Codeforces 558C Amr and Chemistry 暴力 - -
点击打开链接 Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input stan ...
- CF 558 C. Amr and Chemistry 暴力+二进制
链接:http://codeforces.com/problemset/problem/558/C C. Amr and Chemistry time limit per test 1 second ...
- codeforces 558C C. Amr and Chemistry(bfs)
题目链接: C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input st ...
- C. Amr and Chemistry(Codeforces Round #312 (Div. 2) 二进制+暴力)
C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 【23.39%】【codeforces 558C】Amr and Chemistry
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Amr and Chemistry CodeForces 558C(BFS)
http://codeforces.com/problemset/problem/558/C 分析:将每一个数在给定范围内(10^5)可变成的数(*2或者/2)都按照广搜的方式生成访问一遍,标记上访问 ...
随机推荐
- appium 几点总结(转)
1. 建立session时常用命令: DesiredCapabilities cap = new DesiredCapabilities(); cap.SetCapability("brow ...
- mysql update 的时候使用left join和where语句
在使用update语句的时候我们有时候需要利用left join 关联表,以下是正确操作: 效果,让指定的order表id为1,2,3数据的finish_at字段更新为freports表的create ...
- 转:myeclipse和eclipse的区别和联系,以及版本间的对应关系
myeclipse和eclipse的区别和联系,以及版本间的对应关系 Eclipse:IBM花了4千万美金来开发这个IDE(Integrated Development Environment).第一 ...
- Linux Ubuntu下Dropbox图标消失
Linux下的Dropbox是支持命令行模式的.,在terminal中输入dropbox后,如下提示: Dropbox command-line interface commands: Note: u ...
- AngularJS, Ember.js, Backbone这类新框架与 jQuery的重要区别在哪里?
jQuery主要是用来操作DOM的,如果单单说jQuery的话就是这样一个功能,它的插件也比较多,大家也都各自专注一个功能,可以说jQuery体系是跟着前端页面从静态到动态崛起的一个产物,他的作用就是 ...
- MySQL 事件EVENT
一.用途用于某一时间执行一个事件或周期性执行一个事件. 二.语法CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] eve ...
- Python中的import和from import
一.Python路径介绍 在python用import或者from...import来导入相应的模块. 模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把 ...
- POJ 3687:Labeling Balls(优先队列+拓扑排序)
id=3687">Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10178 Acc ...
- 操作REDIES
import redis r=redis.Redis(host='118.XX.XX.XXX',password='XXXXXXX9*',db=1,port=6379) # 增删改查r.set('jd ...
- Android中database所在文件夹路径(9.6)
1 sd----->data---->对应app---->databases----->创建的db 2 push到pc上,可以使用GUI工具SQLiteSpy直接查看datab ...