[每日一题2020.06.11]Codeforces Round #644 (Div. 3) H
A-E见 : 这里
我觉得很有必要把H拿出来单独发( 其实是今天懒得写题了 )
problem H
一个从 1 到 $ 2^m - 1$ 的长度为m的连续二进制序列, 删去指定的n个数, 问剩余的数的中位数是多少
看了题解还琢磨了一个小时才懂, 绝不能跟着题目傻傻的暴力来写
主要的思想还是动态调整的思想
首先比如我们制定m = 3
得到一串序列转换为十进制就是 0 1 2 3 4 5 6 7, 该怎么删才能在不用遍历的情况下找到中位数呢?
( 这题肯定不能暴力, 给定的m = 60, $ 2^{60} = 1152921504606846976 $ )
我们这里用一种动态维护的方式 :
比如n=3, m=3, 删去001, 011, 111
- 先不管三七二十一, 删去最末尾的那n个数, 判断假设这样删除的话最后的中位数是几

- 将删除队列从小到大排序, 依次维护调整 比如这里是1, 3, 7
- 假如删除的为比目前所指向的值大的数, 则不用调整 why ? 见图 :

可以看到, 只要删除的数是比目前所指向的大的数, 中位数都是现在这个数, 不用变.
- 假如删除的为小于或等于目前所指向的值的数, 则指针++ why ? 见图 :

比如我们删除1, 那么相当于原本假设的删除的最后三个数少了一个, 前面增加了一个, 则删除后序列的中间值为现在的值+1 .
我们将3, 7继续删除 :


由于原本的值是从0连续的, 所以直接输出最后指针pos的值的二进制形式即为答案.
tips : 见到这种题, 一定要好好想想位置的计算, 很容易出现错误 !
pos的位置 :

ac代码 :
/*
* Author: RoccoShi
* Time: 2020-06-10 20:05:02
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[105];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--) {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; ++i)
{
string s;
cin >> s;
ll tmp = 0;
for (int j = 0; j < m; ++j)
{
tmp = tmp*2 + s[j] - '0'; // 二进制 --> 十进制
}
a[i] = tmp;
}
sort(a, a + n);
ll pos = ((1ll<<m)-1-n) / 2;
for (int i = 0; i < n; ++i)
{
if(a[i] <= pos)
pos++;
}
string ans(m,'0');
for(int i = m-1; i >= 0; --i) { // 十进制 --> 二进制
ans[i] = (pos & 1) + '0';
pos >>= 1;
}
cout << ans << endl;
}
return 0;
}
这里注意下十进制二进制的相互转换代码 ( 建 议 背 诵 ) :
int x = 0;
for (int j = 0; j < m; ++j)
{
x = x*2 + s[j] - '0'; // 二进制s --> 十进制x
}
for(int i = m-1; i >= 0; --i)
{
ans[i] = (pos & 1) + '0'; // 十进制 --> 二进制
pos >>= 1;
}
[每日一题2020.06.11]Codeforces Round #644 (Div. 3) H的更多相关文章
- [每日一题2020.06.10]Codeforces Round #644 (Div. 3) ABCDEFG
花了5个多少小时总算把div3打通一次( 题目链接 problem A 题意 : 两个x*y的矩形不能重叠摆放, 要放进一个正方形正方形边长最小为多少 先求n = min(2x, 2y, x+y) 再 ...
- [每日一题2020.06.07]codeforces Round #627 (Div. 3)
problem A /* * Author: RoccoShi * Time: 2020-06-07 19:37:51 */ #include <bits/stdc++.h> using ...
- [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找
739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...
- [每日一题2020.06.17] leetcode周赛T3 5438 制作m束花所需的最少天数 二分搜索
题目链接 这题我开始一直在想如何在数组上dp操作搜索区间, 很蠢, 实际上用二分查找的方法可以很快的解决 首先我们通过一个函数判断第x天是否符合题意, 如果x天可以做出m束花, 那么大于m的天数必然可 ...
- [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式
题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...
- [每日一题2020.06.08]洛谷P1605 DFS
今天cf又杯具的只写出2题, 虽然AB题20分钟左右就搞定了, 但是CD写了2个小时也没写出来 D题我用到了DFS, 虽然必不正确, 但是我至少发现了一个问题, 那就是我连DFS都忘了, 于是怒找DF ...
- [每日一题2020.06.16] leetcode双周赛T3 5423 找两个和为目标值且不重叠的子数组 DP, 前缀和
题目链接 给你一个整数数组 arr 和一个整数值 target . 请你在 arr 中找 两个互不重叠的子数组 且它们的和都等于 target .可能会有多种方案,请你返回满足要求的两个子数组长度和的 ...
- [每日一题2020.06.15]P1226 【模板】快速幂取余运算
我是题目 快速幂就是快速求 \(a^b\)的一种算法 快速幂 思想 : 比如我要求 \(6^9\) 首先将幂转化为二进制形式 : \[6^9 = 6^{1001} \tag{1} \] 可以得到 : ...
- [每日一题2020.06.12]P3375 【模板】KMP字符串匹配
题目链接 关于kmp : https://www.cnblogs.com/roccoshi/p/13096988.html 关于kmp, 想了很久, 我觉得不应该放在这里写, 另开一贴记录一下. #i ...
随机推荐
- 【Java_SSM】(三)maven中的配置文件setting的配置
这篇博文我们介绍两方面:如何修改setting.xml文件及相应配置(本文maven版本为3.5.0) (1)首先打开maven文件目录--conf,会看见如下目录 (2)复制setting.xml文 ...
- Keyboard Shortcuts Reference
Sublime Text 3快捷键 Ctrl + Shift + P 打开命令面板 Ctrl + P 搜索项目中的文件 Ctrl + G 跳到第几行 Ctrl + W 关闭当前打开文件 Ctrl + ...
- SQL——SELECT、UPDATE、DELETE和INSERT INTO
SQL是一种ANSI的标准计算机语言.ANSI:美国国家标准化组织.除SQL标准外,大部分SQL数据库都拥有私有的扩展.SQL对大小写不敏感.某些数据库系统要求在SQL命令末端使用分号,这样可以执行一 ...
- Java——删除Map集合中key-value值
通过迭代器删除Map集合中的key-value值 Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext() ...
- 最全的ASCII码对照表
转自https://blog.csdn.net/jinduozhao/article/details/75398793 十进制代码 十六进制代码 MCS 字符或缩写 DEC 多国字符名 ASCII 控 ...
- 基于Basys2开发板的简易电子琴和音乐播放器设计
背景:华中科技大学 电测综合实验 主要功能:Basys2开发板外接一个扬声器(或无源蜂鸣器也可)实现电子琴和音乐播放器的功能.其中由于开发板上只有4个按键,所以电子琴功能只做了4个音调,分别对应于4个 ...
- 舵机MX-64AR与MX-28AR驱动
背景:硬件采用485通信,在tb上采购的无需收发控制的串口转RS485模块(485通信为半双工,一般情况需要控制收发模式).在使用该模块后,即可完全使用一个普通地串口来对485通信的舵机进行操作. 模 ...
- jchdl - RTL实例 - And
https://mp.weixin.qq.com/s/86d_sFN0xVqk1xRaRyoAkg 使用rtl语法,实现简单的与门. 参考链接 https://github.com/wjcdx ...
- 数据库之 MySQL --- 下载、安装 及 概述(一)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一 . MySql数据库的安装 1.图解MySQL程序结构 2.双击运行安装程序:以Win32位为例 ...
- Java实现 LeetCode 386 字典序排数
386. 字典序排数 给定一个整数 n, 返回从 1 到 n 的字典顺序. 例如, 给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] . 请尽可能的优化算法的时 ...