cf 1524A And Then There Were K

Posted yeah17981

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf 1524A And Then There Were K相关的知识,希望对你有一定的参考价值。

Problem - A - Codeforces

给定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 (约瑟夫环)

UVALive - 3882:And Then There Was One

UVALive 3882 And Then There Was One