CF 456 div.2 B. New Year's Eve
阿新 • • 發佈:2019-04-30
每次 sta sizeof spa 異或 stack scan 最大 i++ #include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<list>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> p;
typedef long double ld;
#define mem(x) memset(x, 0, sizeof(x))
#define me(x) memset(x, -1, sizeof(x))
#define fo(i,n) for(i=0; i<n; i++)
#define sc(x) scanf("%lld", &x)
#define pr(x) printf("%lld\n", x)
#define pri(x) printf("%lld ", x)
#define lowbit(x) x&-x
const ll MOD = 1e18 +7;
const ll N = 6e6 +5; return cout<<n<<endl,0;
while(l<=n) l*=2;
cout<<l-1<<endl;
return 0;
}
題意:從1~n中選最多k個數,使異或值最大
啊啊啊 no more than k 每次都自動忽略 奇了怪了
剛開始以為必須選k個數, 想了半天
wa 既然最多能選k個數 那選倆異或值最大的(k==1 就只能選n了
2^p xor z^p-1 == 2^(p+1)-1 能得到最大值
找<=n的最大2^p就行
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<list>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> p;
typedef long double ld;
#define mem(x) memset(x, 0, sizeof(x))
#define me(x) memset(x, -1, sizeof(x))
#define fo(i,n) for(i=0; i<n; i++)
#define pr(x) printf("%lld\n", x)
#define pri(x) printf("%lld ", x)
#define lowbit(x) x&-x
const ll MOD = 1e18 +7;
const ll N = 6e6 +5;
int main()
{
ll i, j, k, l=1;
ll n, m, t;
//取2^p<=n, 則2^p xor 2^P-1 == 2^(p+1)-1 為最大值
cin>>n>>k;
if(k==1)
while(l<=n) l*=2;
cout<<l-1<<endl;
return 0;
}
CF 456 div.2 B. New Year's Eve