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)都按照广搜的方式生成访问一遍,标记上访问 ...
随机推荐
- JComboBox添加item的赋值类型问题!不一致的话会导致不能更改jcombobox的选择值
在用swing做页面的时候,往往需要设置字体样式,那么,如何用一种方法设置字体之后,在后面的其他页面就不需要再次设置字体了呢? 下面这个方法就可以解决了: JComboBox在对它进行添加子项的时候, ...
- window coordinate
到ndc的转换是通过(x/w,y/w,z/w) 到了 window coordinates dx upper left gl lower left setviewport setscissor rt ...
- 【Hadoop】Hadoop mr wordcount基础
1.基本概念 2.Mapper package com.ares.hadoop.mr.wordcount; import java.io.IOException; import java.util.S ...
- [转载]How to Install Google Chrome 39 in CentOS/RHEL 6 and Fedora 19/18
FROM: http://tecadmin.net/install-google-chrome-in-centos-rhel-and-fedora/ Google Chrome is a freewa ...
- 纯css 实现 三角形、梯形等 效果
今天一个刚开始学习html 的小白问我一个问题,css 可以实现正方形,长方形,和圆型(border-radius),怎么能做出个三角形.梯形等等形状呢?于是我便开启了装逼模式, 给他讲解了一下我的思 ...
- 【重点突破】—— 百度地图在React单页面应用中的使用
前言:百度地图是网页中使用地图的常用第三方工具,这里结合React项目中学到的应用场景总结一些使用要点. 一.在网页中嵌入百度地图 搜百度地图开放平台,注册百度开发者账号 控制台:查看应用.创建应用( ...
- 【Javascript 基础】比较 undefined 和 null 值
JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...
- HDU1789 Doing Homework again 【贪心】
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 【Django】01_创建一个简单的项目
1.创建Django项目 点击:file-->new project,出现下面的对话框.选择Django栏目,输入项目名称, 选择python解释器版本,点击create创建. Django将自 ...
- kvo&kvc
Key Value Coding Key Value Coding是cocoa的一个标准组成部分,它能让我们可以通过name(key)的方式访问property, 不必调用明确的property ac ...