51nod 1483 化学变换 | 二进制 暴力
51nod 1483 化学变换
题面
给出n个整数(n <= 1e5,每个数 <= 1e5),对每个数都可以进行多次操作,操作有两种:乘二/整除以二。
问最少经过多少次操作能使所有数相等。
题解
对于每个数,枚举它变成另外一个数(目标数)所需的最小步数,目标数的代价值 += 这个最小步数。这样最后输出所有目标数中代价值最小的即可。
注意,对于一个奇数,把它除以二之后再乘以二,得到的是一个新数。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
#define space putchar(' ')
#define enter putchar('\n')
using namespace std;
typedef long long ll;
template <class T>
bool read(T &x){
char c;
bool op = 0;
while(c = getchar(), c < '0' || c > '9')
if(c == '-') op = 1;
else if(c == EOF) return 0;
x = c - '0';
while(c = getchar(), c >= '0' && c <= '9')
x = x * 10 + c - '0';
if(op) x = -x;
return 1;
}
template <class T>
void write(T x){
if(x < 0) putchar('-'), x = -x;
if(x >= 10) write(x / 10);
putchar('0' + x % 10);
}
const int N = 100005;
int n, a[N], sum[N], vis[N], cnt[N], ans = 0x7fffffff;
void add(int i, int t, int step){
vis[t] = i;
cnt[t]++;
sum[t] += step;
}
int main(){
read(n);
for(int i = 1; i <= n; i++)
read(a[i]);
for(int i = 1; i <= n; i++){
int t = a[i], step = 0;
while(t < N){
add(i, t, step);
t <<= 1, step++;
}
t = a[i], step = 0;
while(t){
t >>= 1, step++;
int tt = t, tstep = step;
while(tt < N && vis[tt] != i){
add(i, tt, tstep);
tt <<= 1, tstep++;
}
}
}
for(int i = 1; i < N; i++)
if(cnt[i] == n)
ans = min(ans, sum[i]);
write(ans), enter;
return 0;
}
51nod 1483 化学变换 | 二进制 暴力的更多相关文章
- 51Node 1483----化学变换(暴力枚举)
51Node 1483----化学变换 有n种不同的化学试剂.第i种有ai升.每次实验都要把所有的化学试剂混在一起,但是这些试剂的量一定要相等.所以现在的首要任务是把这些化学试剂的量弄成相等. 有两 ...
- 51nod 1414 冰雕 思路:暴力模拟题
题意是现在有n个雕像把一个圆等分了,每一个雕像有一个吸引力. 叫你不移动雕像只去掉雕像让剩下的雕像还能等分这个圆,求剩下的雕像的吸引力之和的最大值. 显然去掉后剩下雕像的间隔应该是n的因子,因为这样才 ...
- [bzoj1692] [Usaco2007 Dec]队列变换 (hash||暴力)
本题同bzoj1640...双倍经验双倍幸福 虽然数据范围n=3w然而O(n²)毫无压力= = http://blog.csdn.net/xueyifan1993/article/details/77 ...
- 51nod 1421 最大MOD值 | 暴力
题面 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai ≥ aj. Input 单组测试数据. 第一行包含一个整数n,表示数 ...
- 51nod 1596 搬货物(二进制处理)
传送门 题意 分析 只要从小到大二进制处理即可 我一直遍历了1->n,应该是0->1e6+1000 果然智障 trick 代码 #include<cstdio> #includ ...
- 51nod 1413:权势二进制
1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 一个十进制整数被叫做权势二进制,当他的十进制 ...
- 51nod 多重背包问题(二进制优化)
有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...
- C. p-binary(二进制暴力)
\(设最后的答案为t,那么有\) $$2^+2^+...2^+tp=n$$ \(那我们完全可以枚举这个t,判断n-tp(我们下面记为z)能刚好被t个二进制表示\) \(首先,z如果小于t,那一定无法表 ...
- 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 ...
随机推荐
- [Processing]在画布上写文本
准备工作 这一步只是我强迫症犯了哈,这个随意,画几根线而已.每一小格10个像素,中格50,大格100像素 void setup() { size(,); } void draw() { backgro ...
- Jmeter关联处理
采桑子·重阳 人生易老天难老, 岁岁重阳. 今又重阳, 战地黄花分外香. 一年一度秋风劲, 不似春光. 胜似春光, 廖廓江天万里霜. 当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这 ...
- 木马分析出现python语言,360的安全人员不禁感叹还有这种操作?
几年前,敲诈者木马还是一个默默无闻的木马种类.然而,由于其极强的破坏力和直接且丰厚的财富回报,敲诈者木马这几年已经一跃成为曝光率最高的木马类型——甚至超越了盗号木马.远控木马.网购木马这传统三强.与此 ...
- arp与rarp
- 05慕课网《进击Node.js基础(一)》HTTP概念进阶(同步/异步)
HTTP模块介绍 支持http协议的更多特性 不缓存请求和响应 API比较底层处理流相关,信息解析 HTTP相关概念 回调 将函数作为参数传到执行函数中,参数函数在执行函数中嵌套执行 function ...
- pycharm 2017注册码
1.在浏览器的地址栏输入:http://idea.lanyus.com/,该网址,无需修改用户名,点击获取注册码.复制该注册码,粘贴在注册界面的Activation code的输入框中,点击 ok 该 ...
- iOS开发学习-cocoapods的配置安装
安装coacoapods步骤: 在终端输入如下命令,升级ruby版本: sudo gem update —system 出现这个,标志着安装成功. 完成之后,再输入如下命令: gem sources ...
- Task 6.4 冲刺Two之站立会议5
在完成主界面和聊天窗口的连接之后,今天对聊天界面在以前的基础上添加了很多东西,比如说对于文件传输和文字通信时的表情包的添加以及抖动窗口的设置等等一一系列的功能.我完成的是文字通信这一部分的内容.
- Request[""]接收的值有逗号(,)
这是因为你的前台页面有连个标签的name值相等导致的.Request["name"]其实是通过name值或得标签的value值的. 所以一般情况下name值不要相等. 需要互斥的就 ...
- 如何解决abd.exe已停止工作
打开电脑,右键点击属性会出现如下界面: 点击左边高级系统设置:将会出现如下界面: 点击环境变量,点编辑. 把环境变量中的 ANDROID_ADB_SERVER_PORT 改成1122以后还遇到这个问 ...