题目

有n种不同的化学试剂。第i种有ai升。每次实验都要把所有的化学试剂混在一起,但是这些试剂的量一定要相等。所以现在的首要任务是把这些化学试剂的量弄成相等。

有两种操作:

·        把第i种的量翻倍,即第i种的量变成2ai。

·        把第i种的量减半,除的时候向下取整,即把第i种的量变成 ⌊ ai2 ⌋ 。

现在所有的化学试剂的量已知,问最少要变换多少次,这些化学试剂的量才会相等。

样例解释:把8变成4,把2变成4。这样就需要两次就可以了。

Input
单组测试数据。
第一行有一个整数n (1 ≤ n ≤ 10^5),表示化学物品的数量。
第二行有n个以空格分开的整数ai (1 ≤ ai ≤ 10^5),表示第i种化学试剂的量。
Output
输出一个数字,表示最少的变化次数。
Input示例
3
4 8 2
Output示例
2

思路:

一开始看到1e5,感觉应该是n*logn算法,想到需要排序什么的,没想到方向完全错了;自己写了几个例子,也没看到啥规律;
后来看了讨论贴,发现直接枚举暴力就行,看来后续思考问题的思路还是要变一变,暴力可以解决任何问题,首先要考虑暴力,只要复杂度满足就可以;
大概方法就是:
找出每个数通过乘以2,或者除以2,能够变成的数的所有的可能,并且记录下变成这个数所需要的步骤;同时记录下有多少个数可以变成这个数;
最后,直接遍历所有数,求出对于有n个数可以到达这个数的步骤最小值即可;
简单来说:
对于输入的每一个num
1、每次乘以2=tmp,步骤step ++;直到1e5,然后记录cnt【tmp】+= step;同时vis【tmp】++(也就是这个num可以到tmp);
2、对于每个num除以2,同时step ++;不过这里要注意,如果除以2得到偶数可以不用考虑(因为偶数反乘2回去,第1条已经干了),直到碰到奇数,这时可以再反乘以2(这个时候得出的数字,之前是没有出现过的),一直到1e5,同时记录次数以及vis;
这样,对于遍历vis, 次数=n的,然后求cnt,最终所有cnt里面最小值即可

代码:

#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int num[100005];
int cnt[200005];
int vis[200005];
void handle(int t)
{int stp = 0;int tmp = t;while(tmp <= 1e5){vis[tmp] ++;cnt[tmp] +=stp ++;tmp <<= 1;}stp = 0;while(t){if ((t&1)&&(t!=1)){t >>= 1;stp ++;cnt[t] += stp;vis[t] ++;int tt = t;int tmstp = stp;while(tt <= 1e5){tt <<= 1;tmstp ++;vis[tt] ++;cnt[tt] += tmstp;}}else{t >>= 1;stp ++;cnt[t] += stp;vis[t] ++;}}
}
int main()
{int n;cin >> n;memset(vis, 0, sizeof(vis));for (int i = 0; i < n; ++ i){cin >> num[i];}for (int i = 0; i < n; ++ i){handle(num[i]);}int ans = 10000000;for (int i = 0; i < 2e5; ++ i){if (vis[i] == n){ans = ans < cnt[i] ? ans:cnt[i];}}cout << ans <<endl;return 0;
}

nod-1483-化学变换相关推荐

  1. 【学习笔记】ICLR2022-SyNet

    一. 代码 1. Run main code ​ # Generate synthetic trees ​ python scripts/03-generate-syntrees.py \ ​ --b ...

  2. 招银信用卡中心-技术方向实习生-编程题-使用python

    题目都偏规律总结类型,只要思路对了,很容易做出来,不像华为机试一道字符串+两道算法题-- 第一题 有n个同学,老师买了n块巧克力(1<n<10^5),按照学号顺序依次来办公室拿巧克力,每个 ...

  3. NVIDIA GPU的快速傅立叶变换

    NVIDIA GPU的快速傅立叶变换 cuFFT库提供GPU加速的FFT实现,其执行速度比仅CPU的替代方案快10倍.cuFFT用于构建跨学科的商业和研究应用程序,例如深度学习,计算机视觉,计算物理, ...

  4. J. Cheminform. | 基于化学基因组学中深度和浅层学习预测药物特异性

    今天给大家介绍由巴黎文理研究大学计算生物研究中心的Veronique Stoven教授课题组发表在J Cheminform上的一篇文章.作者提出一种具有深度学习功能的化学基因组神经网络(CN),以分子 ...

  5. 物理化学笔记(1) 量子化学基础

    物理化学笔记(1)量子化学基础 化学是人类关于原子和分子的知识和智慧的结晶.一个优秀的化学家需要适当了解其他科学分支的观测角度,在一定程度上听得懂其他学者的语言.但更重要和根本的是化学家一定要能流利地 ...

  6. 计算机思维在化工方面的应用,计算思维在化学上的应用.pdf

    计算思维在化学上的应用 作业题目2 --化学及化学软件与计算机中的表示.存储.执行的关系 (专业:化学) 1.计算思维与化学 计算思维是运用计算机科学的基础概念进行问题求解.系统设 计.以及人类行为理 ...

  7. 计算机二进制小数加法,二进制是如何将加减乘除变换为加法实现的

    二进制是如何将加减乘除变换为加法实现的?加法是如何由逻辑运算与.或.异或来实现的? 关注者 151 被浏览 10205 查看全部 13 个回答 匿名用户 5分钟教会你古中国人古埃及人和计算机如何用二进 ...

  8. [转载]傅立叶变换在图像处理中的作用

    原文地址:傅立叶变换在图像处理中的作用作者:白屋顶黑乌鸦 从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换.它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分.在不同的研究领域,傅里叶 ...

  9. 计算机量子化学计算数据处理,实验37 量子化学计算.doc

    实验37 量子化学计算.doc 实验37 量子化学计算 一.目的要求 1.通过计算机操作,了解如何运行量子化学应用程序及编制数据输入文件. 2.用HMO法计算共轭分子的电荷密度.键级及自由价,作出分子 ...

  10. 化学结构命名软件对比

    一.你有被化学结构命名难倒过吗? "命名难.难命名.命难名!"是许多医药.化学科研工作者的一块心病,特别是面对一些复杂的化学结构式,如何能够准确.高效地命名是很大的难题. 二.不简 ...

最新文章

  1. 深入分析Java的序列化与反序列化
  2. SAP WM Storage Location Reference在项目实践中的使用
  3. docker 中删除dead状态的容器
  4. NEFU 560 半数集
  5. SpringBoot_数据访问-整合MyBatis(一)-基础环境搭建
  6. 图解分布式系统架构演进之路
  7. java 遍历map集合
  8. h5 php js实验总结,H5学习_番外篇_PHP数据库操作
  9. 455. 分发饼干 golang
  10. 自定义PopupWindow 怎么设置PopupWindow的宽度充满全屏宽度
  11. 用户登陆——数据库逻辑
  12. Android studio吧,Android Studio 连接真机
  13. MFC工作笔记0003---WindowsAPI与MFC的关系
  14. 【AtCoder】ARC065
  15. 贪心算法数塔问题c语言,c语言背包问题_c语言背包问题几种解法_背包问题贪心算法(2)...
  16. 96微信编辑器服务器老是连不上,96微信编辑器出现文章排版混乱的详细原因介绍...
  17. STM32F103 485通信开发实例(三):与触摸屏通过Modbus进行通信
  18. 大三暑假前端实习日志
  19. CSU2080: 航行日志的修复
  20. Learning the Model Update for Siamese Trackers学习笔记

热门文章

  1. 跨境电商:YouTube视频营销必看攻略
  2. Xlua hotfix C#案例
  3. Vista激活时出现“0X80072EFE”故障及解决
  4. 自定义UI控件:弹出键盘添加“完了”按钮
  5. Python语言程序设计基础_序列型数据和控制结构综合练习(第七周)_答案_通识教育必修课程_上海师范大学
  6. 计算机网络误区——可以通过非ARP报文(正常数据包)学习ARP表项吗?
  7. LIO-SAM论文与代码阅读笔记(二)代码阅读:imuPreintergration.cpp和imageProjection.cpp
  8. 数据通信与网络有这一篇就够了(网络模型篇)
  9. IOC注入框架——Unity中的BuildUp与LifetimeManagers
  10. 【Unity项目实战】手把手教学:飞翔的小鸟(4)文本添加