一、题意

  给你一个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题的更多相关文章

  1. Codeforces Round #456 (Div. 2)

    Codeforces Round #456 (Div. 2) A. Tricky Alchemy 题目描述:要制作三种球:黄.绿.蓝,一个黄球需要两个黄色水晶,一个绿球需要一个黄色水晶和一个蓝色水晶, ...

  2. Codeforces Round #456 (Div. 2) B题

    B. New Year's Evetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputout ...

  3. Educational Codeforces Round 27 补题

    题目链接:http://codeforces.com/contest/845 A. Chess Tourney 水题,排序之后判断第n个元素和n+1个元素是不是想等就可以了. #include < ...

  4. cordforce Educational Codeforces Round 47 补题笔记 <未完>

    题目链接 http://codeforces.com/contest/1009 A. Game Shopping 直接模拟即可,用了一个队列来存储账单 #include <iostream> ...

  5. 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 ...

  6. Codeforces Round #456 (Div. 2) A. Tricky Alchemy

    传送门:http://codeforces.com/contest/912/problem/A A. Tricky Alchemy time limit per test1 second memory ...

  7. Codeforces Round #456 (Div. 2) 912E E. Prime Gift

    题 OvO http://codeforces.com/contest/912/problem/E 解 首先把这个数字拆成个子集,各自生成所有大小1e18及以下的积 对于最坏情况,即如下数据 16 2 ...

  8. Codeforces Round #456 (Div. 2) 912D D. Fishes

    题: OvO http://codeforces.com/contest/912/problem/D 解: 枚举每一条鱼,每放一条鱼,必然放到最优的位置,而最优位置即使钓上的概率最大的位置,即最多的r ...

  9. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

随机推荐

  1. 51Nod 1737 配对(树的重心)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1737 题意: 思路: 树的重心. 树的重心就是其所以子树的最大的子树结点 ...

  2. 史上最强大的40多个纯CSS绘制的图形[转]

    今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和网站小图标,真的非常强大,分享给大家. Square(正方 ...

  3. 在Linux和Windows系统上安装Nginx服务器的教程

    在Linux和Windows系统上安装Nginx服务器的教程  1.在CentOS系统上安装Nginx 在 CentOS6 版本的 EPEL 源中,已经加入了 nginx 的 rpm 包,不过此 RP ...

  4. 【Demo】jQuery 图片放大镜效果——模仿淘宝图片放大效果

    实现功能: 模仿淘宝图片放大效果,鼠标移动到小图片的某一处,放大镜对应显示大图片的相应位置. 实现效果: 实现代码: <!DOCTYPE html> <html> <he ...

  5. bzoj4129

    题解: 树上+可修改莫队 莫队的每一块 可以用一个栈 每一次dfs个数>sqrt(n)(自己选的)的时候就可以跳出了 然后不要忘记分出来最后一块 代码: #include<bits/std ...

  6. [转载]java正则表达式

    转载自:http://butter.iteye.com/blog/1189600 1.正则表达式的知识要点1.正则表达式是什么?正则表达式是一种可以用于模式匹配和替换的强有力的工具.2.正则表达式的优 ...

  7. PHP网站自动化配置的实现

    一直都在用yii2做项目,有在用自动化配置,但是没有自己去配置过.中午没事去看了下yii的初始化代码,发现都是php而已! yii2初始化项目代码 所以,我们做项目肯定是可以用php做的,于是我新建了 ...

  8. 记录JAVAWEB部署到JBOSS中遇到的问题

    服务器环境 jdk1.8.0_212 + jboss-eap-6.4  系统是 Service 2008 R2 数据服务器 oracle12c  系统是 Service 2008 R2 首先安装的or ...

  9. 【Ubuntu14】Nginx+PHP5+Mysql记录

    这次因为工作原因,需要在Linux下进行开发.推荐的环境是Ubuntu14+Nginx+PHP+Mysql.环境搭建好之后,装上GIT,装上IDE,觉得Mysql命令界面麻烦又装了个Navicat.总 ...

  10. 分水岭分割算法(watershed segmentation)的C++实现(法2)

    运行环境:ubuntu16.04+Qt+opencv2.4.13.3 watershed.cpp #include "opencv2/imgproc/imgproc.hpp" #i ...