cf题面

中文题意

给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<vector>
#include<cstdio>
#include<algorithm>
const int MAXN=2e5+5;
int n,k,mxa;
std::vector<int> 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()<k) continue;
std::sort(t[i].begin(),t[i].end());
int sum=0;
for(int j=0;j<k;j++) sum+=t[i][j];//题解标程使用了accumulate函数
ans=std::min(ans,sum);
}
printf("%d\n",ans);
return 0;
}

Codeforces 1213D Equalizing by Division的更多相关文章

  1. D2. Equalizing by Division (hard version)

    D2. Equalizing by Division (hard version) 涉及下标运算一定要注意下标是否越界!!! 思路,暴力判断以每个数字为到达态最小花费 #include<bits ...

  2. codeforces Equalizing by Division (easy version)

    output standard output The only difference between easy and hard versions is the number of elements ...

  3. codeforces 808 D. Array Division(二分)

    题目链接:http://codeforces.com/contest/808/problem/D 题意:有一串长度为n的数组,要求选择一个数字交换它的位置使得这串数能够分成两串连续的和一样的数组. 这 ...

  4. Codeforces Gym101505G:Orchard Division(扫描线+线段树第k大)

    题目链接 题意 给出一个m*m的地图,上面有n个点,现在需要用一个自定义面积的矩形笼罩住恰好n/2个点,并且这个矩形需要有一个点在至少一个角落上,问这个矩形最小的面积是多少. 思路 有点类似于扫描线. ...

  5. CF1213D Equalizing by Division

    easy version hard version 问题分析 直接从hard version入手.不难发现从一个数\(x\)能得到的数个数是\(O(\log x)\)的.这样总共有\(O(n\log ...

  6. Equalizing by Division

    The only difference between easy and hard versions is the number of elements in the array. You are g ...

  7. Codeforces Round 582

    Codeforces Round 582 这次比赛看着是Div.3就打了,没想到还是被虐了,并再次orz各位AK的大神-- A. Chips Moving 签到题.(然而签到题我还调了20min--) ...

  8. CF 题目选做

    写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...

  9. Educational Codeforces Round 21 D.Array Division(二分)

    D. Array Division time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

随机推荐

  1. 搞懂MySQL GTID原理

    从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式.通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID.这种方式强化了数据库的主备一致性,故障恢复以及容错能力. GT ...

  2. 小记--------CDH版本启动cloudera manager UI界面

    首先需要启动mysql源数据库 server所在服务器的路径:/opt/cm-5.14.0/etc/cloudera-scm-server 下 查看配置文件: db.properties   查看my ...

  3. typescript中类型断言好理解也好用

    类型断言是个好用的玩意,虽然typescript很强大,但是有时还不如我们知道一个值的类型,导致在开发过程中总是报一些令人头痛的类型错误.使用断言,简单来说就是先做好一个假设,使得编译通过. 我一开始 ...

  4. myeclipse显示db-brower

    myeclipse显示db-brower 这东西怎么调出来? windows->show view->other->db borwser

  5. Django重写用户模型报错has no attribute 'USERNAME_FIELD'

    目录 Django重写用户模型报错has no attribute 'USERNAME_FIELD' 在重写用户模型时报错:AttributeError: type object 'UserProfi ...

  6. 滚动页面产生动画WOW.js的用法

    简介 在一些网页上,当你滚动页面的时候会看到各式各样的元素动画效果,非常动感.WOW.js 就是一款帮助你实现这种 CSS 动画效果的插件.WOW.js 依赖 animate.css,所以它支持 an ...

  7. groovy程序设计

    /********* * groovy中Object类型存在隐式转换 可以不必使用as强转 */ Object munber = 9.343444 def number1 = 2 println mu ...

  8. Linux配置nginux

    安装依赖 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl- ...

  9. ThinkPHP5框架缺陷导致远程命令执行(POC整合帖)

    摘要 近日thinkphp团队发布了版本更新https://blog.thinkphp.cn/869075 ,其中修复了一处getshell漏洞. 影响范围 5.x < 5.1.31<= ...

  10. 小P的架构生活(上)

    背景:这年小P已经参加工作4年了,在前同事Z的极力劝说下,小P加入了Z新开的公司Y,公司一共有三个人:老板Z.程序员小P.前台W.项目名为XX交易系统 小P加班加点,终于在两个月后把系统开发完成,版本 ...