Codeforces Round #456 B题

一、题意
给你一个n和一个k,让你从[1, n]区间内选k个数,这k个数异或和最大。
二、思路
我一开始看到这种题,不自觉地就想到,莫非又要搞很复杂的线段树、主席树?貌似还有些难搞啊。然而事实是:Codeforces最不喜欢出的题目就模板题,相反,他的题更倾向于想法,看看你能不能想到,能不能考虑全。我个人觉得,这样的题做起来还更有意思。
事实是,这题的思路:选k个数,使异或和最大,那么,两种情况:
(1)k = 1,那毫无疑问选最大的数,输出n;
(2)k > 1,那就输出2i - 1。其中,i是n的二进制表示的长度。PS:前导0肯定不算的啦,从最高位1开始算起。
PS:异或很重要的性质,这个是必须掌握的哦。二进制中,任何数(0或1),和0异或,都是它本身。
三、吐槽&总结时间
我想到差不多上面的思路后,一开始想的是,考虑最大的那个数的二进制表示s,如果s中0的个数 <= k,那么,肯定能找到k个比n小的数,他们就是2i。这样,把他们全部和s逻辑或,最后输出s的十进制就OK了。然后,被hack了T_T
想了好长一会儿,终于发现,上面的方法有问题,如果s中0的个数 > k,也可以把s中的0变成1啊,可以选2i+2j 这种的啊。既然这样,那么,我就产生了一个很想想就觉得很傻逼的想法:既然输入数据k >= 1,那么,答案永远都是2i - 1(其中,i是n的二进制表示的长度)。我当时脑中的想法是:去[1, n]里面选k个数,和n异或的最大值。尽管我看了很多遍题目。也看了很多遍a1⊕a2⊕……⊕ak,都没发现自己的想法有错,所以,第二次提交又hacked,而且,我提交后,很肯定地认为自己没错了,把题目锁了,想去hack别人一发,消消气,结果,我那题就这样错了。直到写这篇题解前,我去补题,把昨晚的代码交上去被样例20卡掉了,我才顿悟:真的太糊涂了。
很多次比赛都是这样,并不是自己想不到那个点子,而是总是被某个“非常不起眼”卡到绝望、卡到失败。
这个我觉得这毛病和心态有关,要好好调整。一定要,必须要。
四、源代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
LL a, b;
while(~scanf("%lld%lld", &a, &b)) {
){
printf("%lld\n", a);
continue;
}
;
; a > ; ++i) {
a >>= ;
}
printf();
}
;
}
Codeforces Round #456 B题的更多相关文章
- Codeforces Round #456 (Div. 2)
Codeforces Round #456 (Div. 2) A. Tricky Alchemy 题目描述:要制作三种球:黄.绿.蓝,一个黄球需要两个黄色水晶,一个绿球需要一个黄色水晶和一个蓝色水晶, ...
- Codeforces Round #456 (Div. 2) B题
B. New Year's Evetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputout ...
- Educational Codeforces Round 27 补题
题目链接:http://codeforces.com/contest/845 A. Chess Tourney 水题,排序之后判断第n个元素和n+1个元素是不是想等就可以了. #include < ...
- cordforce Educational Codeforces Round 47 补题笔记 <未完>
题目链接 http://codeforces.com/contest/1009 A. Game Shopping 直接模拟即可,用了一个队列来存储账单 #include <iostream> ...
- Codeforces Round #456 (Div. 2) B. New Year's Eve
传送门:http://codeforces.com/contest/912/problem/B B. New Year's Eve time limit per test1 second memory ...
- Codeforces Round #456 (Div. 2) A. Tricky Alchemy
传送门:http://codeforces.com/contest/912/problem/A A. Tricky Alchemy time limit per test1 second memory ...
- Codeforces Round #456 (Div. 2) 912E E. Prime Gift
题 OvO http://codeforces.com/contest/912/problem/E 解 首先把这个数字拆成个子集,各自生成所有大小1e18及以下的积 对于最坏情况,即如下数据 16 2 ...
- Codeforces Round #456 (Div. 2) 912D D. Fishes
题: OvO http://codeforces.com/contest/912/problem/D 解: 枚举每一条鱼,每放一条鱼,必然放到最优的位置,而最优位置即使钓上的概率最大的位置,即最多的r ...
- Educational Codeforces Round 15 套题
这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...
随机推荐
- eclipse中下载maven插件解决办法
https://blog.csdn.net/qq_30546099/article/details/71195446 解决Eclipse Maven插件的最佳方案 https://www.cnblog ...
- 炫酷的CSS3抖动样式:CSS Shake
CSS Shake是一个使用CSS3实现的动画样式,使用SASS编写,利用它我们可以实现多种不同样式的抖动效果(如下面的GIF图像): 炫酷的CSS3抖动样式:CSS Shake 这是一个很微小的动画 ...
- 这些HTML、CSS知识点,面试和平时开发都需要 No5-No7(知识点:文字设置、设置背景、数据列表)
系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) 这些HTML.CSS知识点,面试和平时开发都需要 No5-No7(知识 ...
- MVP框架模式
一.基本概念 MVP是Model-View-Presenter的简称,即模型-视图-表现层的缩写.MVP是由MVC模式进化而来的,MVP改进了MVC中的控制器过于臃肿的问题.与MVC一样,MVP将应用 ...
- 2-14 MySQL初步认识,及CentOS6.8环境,源码方式安装MySQL
什么是数据库: 存放数据的仓库RDBMS-->(Relational Database Management System) 关系型数据库管理系统DBMS--->(Database Man ...
- IOS-网络(监听网络状态)
// // BWNetWorkTool.h // IOS_0131_检测网络状态 // // Created by ma c on 16/1/31. // Copyright © 2016年 博文科技 ...
- redis.conf配置文件参数说明
参数说明 redis.conf 配置项说明如下: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护 ...
- 在CMD中使用for命令对单行字符串做分割的方法
我们都知道CMD中的for命令是执行循环命令的,数据来源可以是一个文件,一个命令的结果或一个字符串,只有这3种来源 如果是一个文件则对这个文件的所有字符串进行循环处理 如果是一个命令结果,那么对这个命 ...
- istringstream、ostringstream、stringstream类介绍
本文转载自: http://www.cnblogs.com/gamesky/archive/2013/01/09/2852356.html 一.C++的输入输出分为三种: (1)基于控制台的I/O ( ...
- .properties文件常量定义
application.properties文件,位于resources目录下.一般定义一些不会改变的数据如数据库相关配置,文件路径,项目地址. 如何在项目代码中获取该文件中的配置信息: 1,在app ...