CF2018年的第一场比赛,这也是我第一次打CF,发现挺有意思的。
本人太弱只能去写写签到题,B题以为是搜索或者贪心卡了好久,1个小时过去了才发现有规律,一发Pretest Passed,然后一直没人hack以为稳了。比赛结束竟然FST了 (⋟﹏⋞),查看源代码发现竟然是少输入了一个值ORZ,感觉自己像个智障,好像本来就是。
题意就是1-n的整数任取k个数进行异或得到最大值。
思路:
将1-n以2进制列出,不难发现除了k为1输出n以外,总能凑到n二进制最高位1所在之后全为1的情况(表述能力太差)。
举个例子 9二进制为1001,最高位1所在之后全为1,即1111,就是2^4-1。
代码:
#include<stdio.h>
#define ll long long
int main(){
ll n,m,ans=1;
scanf("%lld%lld",&n,&m);
if(m==1)printf("%lld\n",n);
else {
while(ans<<=1,n>>=1);
printf("%lld\n",ans-1);
}
return 0;
}