UVa12614 - Earn For Future

本博客探讨了一种策略,通过理解位运算规则,玩家可以在特定的赌场游戏中选择卡片,以最大化其赢得的金额。文章详细解释了位运算的概念,并通过实例展示了如何在给定的卡片集合中找到最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In a lazy afternoon the great Froogrammer came to realize that, to make his future plans successful he needs a lot of money. To make some quick cash he decided to go to the casino to play a game. The rule of the game is the following:

  • The player is given N cards. Each card has a non-negative integer printed in it.

  • The player will choose some cards from the given cards.

  • The bitwise AND value of the chosen cards will be calculated and the player will be given the same amount of money. (i.e. equal to the bitwise AND value of the chosen cards).

After getting N cards Froogrammer was in a fix as usual. He could not decide which of the cards to choose. So he called you to help him. Please tell him the maximum amount he can win from these set of cards. If you are confused about bitwise AND operation see the notes section below.

Input 

The first line of input will contain the number of test cases T (T < 101). Then there will be T test cases. Each of the test cases will start with an integer N ( 0 < N < 31) denoting the number of cards. Then the following line will contain N non-negative integers Ci ( 0$ \le$Ci < 231) separated by space, denoting the numbers printed on each of the cards.

Output 

For each test case print one line of output denoting the case number and the maximum amount Froogrammer can win. See sample output for exact format.


Note:

bitwise AND takes two binary representations of equal length and performs the logical AND operation on each pair of corresponding bits. The resulting bit of a position is 1 if the bit at that position of both numbers is 1; otherwise, that bit is 0.

For example:

        0101 (decimal 5)
    AND 0011 (decimal 3)
      = 0001 (decimal 1)

Sample Input 

1
2
0 1

Sample Output 

Case 1: 1

#include <cstdio>
#include <algorithm>

using namespace std;

const int N = 31;

int num[N];
int n;

void input()
{
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &num[i]);
	}
}


void solve(int cas)
{
	int ans = *max_element(num, num + n);
	printf("Case %d: %d\n", cas, ans);
	
}

int main()
{
	#ifndef ONLINE_JUDGE
		freopen("d:\\OJ\\uva_in.txt", "r", stdin);
	#endif
	
	int t;
	scanf("%d", &t);
	for (int i = 1; i <= t; i++) {
		input();
		solve(i);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值