ACM-Fjnu18级第一次友谊赛F题题解-一道理解题

ACM-Fjnu18级第一次友谊赛F题题解

题面:

Since Grisha behaved well last year, at New Year’s Eve he was visited by Ded Moroz who brought an enormous bag of gifts with him! The bag contains n sweet candies from the good ol’ bakery, each labeled from 1 to n corresponding to its tastiness. No two candies have the same tastiness. The choice of candies has a direct effect on Grisha’s happiness. One can assume that he should take the tastiest ones — but no, the holiday magic turns things upside down.

It is the xor-sum of tastinesses that matters, not the ordinary sum! A xor-sum of a sequence of integers a1, a2, …, am is defined as the bitwise XOR of all its elements: , here denotes the bitwise XOR operation; more about bitwise XOR can be found here. Ded Moroz warned Grisha he has more houses to visit, so Grisha can take no more than k candies from the bag.

Help Grisha determine the largest xor-sum (largest xor-sum means maximum happiness!) he can obtain.

INPUT The sole string contains two integers n and k
(1 ≤ k ≤ n ≤ 1018).

OUPUT

Output one number — the largest possible xor-sum.

Examples

Note

> In the first sample case, one optimal answer is 1, 2 and 4, giving the xor-sum of 7.

In the second sample case, one can, for example, take all six candies and obtain the xor-sum of 7.

此题思维量并不大,难点应该是对于XOR运算的理解
所以我觉得是翻译题而已

XOR(异或)运算是二进制运算
简单地
1^1=0
0^0=0
1^0=1
0^1=1
两者相等为0,不等为1.

那么接下来翻译一下题目:
给出n种物品(每种一个),只能取走不超过k个的物品。
题目要求就是:从1~n中选出k个物品(价值),使得它们的异或值最大
易知如:4=0100>3=0011且7=2^3-1
60=0111100>3=0000011且63=2^6-1
4^3=111,64 ^63=1111111
易知只要k>=2时总能从1~n中取得异或值最大为与n二进制同位数的所有位皆为1的数
那就很简单了

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <bits/stdc++.h>
#define N 100050
#define double pai = 4.0*atan(1.0)
#define mes(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long int ll;
 int main()
{
	ll n , k;
	while(cin>>n>>k)
	{
		ll p=n;
		if(k==1) cout<<n<<endl;//根据note知道直接输出n就好了
		else/*只要算位数就行了,反正到最后都是11……*/{
			ll result=1;
			n<<=1;
			while(n>>=1) result*=2;
				cout<<result-1<<endl;//2^M-1 总能XOR
			} 
		} 
    return 0;//学艺不精告辞 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值