cf 1524A And Then There Were K
Posted yeah17981
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf 1524A And Then There Were K相关的知识,希望对你有一定的参考价值。
给定n,找到最大的k,使n&(n-1)&(n-2)……&(k+1)&k=0
这波,这波不暴力还愣着干啥呢
然后超时了
没错超时了
就离谱
那行,打表也行
然后在我输出1-1000000000的结果后
0 1 1 3 3 3 3 7 7 7 7 7 7 7 7 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15……
个数分别是1 2 4 8 16……2^n
数字分别是1-1 2-1 4-1 8-1 16-1…… 2^n-1
这波不是好家伙吗
直接上代码芜湖
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,t,a;
cin>>n;
while(n--)
{
t=1;
cin>>a;
for(int i=1;i<=a;i++)
{
t=(t << 1);
if(t>a)
break;
}
cout<<(t >> 1)-1<<endl;
}
}
漂亮
但是我们还是要思考一下这玩意是咋回事
假设n的二进制表达式有6位,首位必为1,按位与为0则需要一个5位数,假设k是5位数的最大数011111,此时n已经和100000与过了,结果一定为1000000,011111&100000=0
完成
以上是关于cf 1524A And Then There Were K的主要内容,如果未能解决你的问题,请参考以下文章
And Then There Was One(约瑟夫问题变形)
越狱Season 1-Episode 11: And Then There Were 7-M
UVALive - 3882 —— And Then There Was One
G - And Then There Was One (约瑟夫环)