博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1213D Equalizing by Division
阅读量:5312 次
发布时间:2019-06-14

本文共 904 字,大约阅读时间需要 3 分钟。

中文题意

给n个数,每次可以把其中一个数字位运算右移一位(即整除以二),问要至少操作几次才能让这n个数中有至少k个相等。

解题思路

这题还有个数据范围更小的,n和k是50,\(a_i\)还是2e5。

发现\(1\leqslant a_i\leqslant 2⋅10^5\),这些数字除以二只会变小,换句话说,整个过程中数字大小都不会超过\(2⋅10^5\),然后就可以用类似桶排序的方法,把所有数字不停除以二,把得到一个数字所用的步骤数(包括0步,即原数字)扔到相应的桶里,之后统计每个桶,有没有k个数,如果有,就计算其中最小的k个步骤数之和,用于更新答案。(感觉这段话还不如代码好懂)

这种思维题,标签都不好打,就模仿cf,给这题打个“暴力”的标签算了

源代码

#include
#include
#include
const int MAXN=2e5+5;int n,k,mxa;std::vector
t[MAXN];//t[i]表示达到i的操作次数int main(){ scanf("%d%d",&n,&k); while(n--) { int a; scanf("%d",&a); mxa=std::max(mxa,a); int cur=0; while(a) { t[a].push_back(cur); cur++; a>>=1; } t[0].push_back(cur); } int ans=0x7fffffff; for(int i=0;i<=mxa;i++) { if(t[i].size()

转载于:https://www.cnblogs.com/wawcac-blog/p/11464615.html

你可能感兴趣的文章
简单工厂模式
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
Objective-C 【关于导入类(@class 和 #import的区别)】
查看>>
倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办...
查看>>
【转】javascript 中的很多有用的东西
查看>>
Python中替换元素
查看>>
关于双核心:也许你不知道的五件事
查看>>
Trace 2018徐州icpc网络赛 (二分)(树状数组)
查看>>
让你的 Python 代码优雅又地道
查看>>
Centos7.2正常启动关闭CDH5.16.1
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
jmeter里面Dug Sampler 和json提取器的用法
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>
公司居然使用监听设备,大家来讨论下IT公司应该怎样管理
查看>>
一句简单的SQL----模糊 查询
查看>>
编程十年 (13):毁人不倦1
查看>>
排序算法小结
查看>>
Android Core
查看>>
给C#学习者的建议 - CLR Via C# 读后感
查看>>