"Or" Game

原创 2016年08月28日 18:36:47
链接:http://codeforces.com/problemset/problem/579/D

题目:

You are given n numbers a1, a2, ..., an. You can perform at most k operations. For each operation you can multiply one of the numbers by x. We want to make as large as possible, where denotes the bitwise OR.

Find the maximum possible value of after performing at most k operations optimally.



题意:给一串数,可以对任意数乘x,总共乘k次。为最后的全部异或和最大为多少

分析:基本是贪心,首先要求异或和最大,那么最好的情况是所有的k个x都乘到一起,因为这样数位最大,其次,保证低位的1尽可能的为奇数,但是却比较麻烦。查阅资料后发现一种另类的前缀和,这里可以叫做前缀异或和以及后缀异或和。输入后预处理一个前缀异或和和一个后缀异或和(均不包含自己),之后对每一个数求前缀和*自己*后缀和*k个x,比较得出最大值。


题解:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#include <functional>
#include <cmath>
#include <cctype>
#include <cfloat>
#include <climits>
#include <complex>
#include <deque>
#include <list>
#include <set>
#include <utility>
#define rt return 0
#define fr freopen("in.txt","r",stdin)
#define fw freopen("out.txt","w",stdout)
#define ll long long
using namespace std;

int a[200010];
int pre[200010];
int old[200010];

int main()
{
	int n, k, x;
	cin >> n >> k >> x;
	for (int i = 1; i <= n;i++)
	{
		cin >> a[i];
		pre[i] = pre[i - 1] | a[i];
	}
	for (int i = n; i > 0; i--)
		old[i] = old[i + 1] | a[i];
	ll l = 1, ans = 0;
	for (int i = 0; i < k; i++)
		l *= (ll)x;
	for (int i = 1; i <= n;i++)
	{
		ans = max(ans, (l*(ll)a[i]) | (ll)(pre[i - 1]) | (ll)(old[i + 1]));
	}
	cout << ans << endl;
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS第三方验证简单接入Game Center

1. 从2016年开始,Game Center已经取消了沙箱机制 2. 要开启Game Center,需要在iTunes Connect的Game Center处,新建一个排行榜或者成就。这个我觉得...
  • qq393830887
  • qq393830887
  • 2017年01月04日 19:59
  • 3471

IOS平台游戏如何对接GameCenter

现在随着手游市场的不断扩大,活跃在IOS平台下的游戏厂商为了增加玩家的粘性,以及为自己的游戏前途考虑都纷纷开始接入苹果国内公司的游戏平台GameCenter;今天呢我就把我对接GameCenter的一...
  • shenjie12345678
  • shenjie12345678
  • 2015年04月13日 17:41
  • 21481

关于博弈基础知识的总结:巴什博弈(Bash Game)、威佐夫博奕(Wythoff Game)、尼姆博奕(Nim Game)

文章PDF文档:http://www.kuaipan.cn/file/id_32020291156705322.html 博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取...
  • chao1983210400
  • chao1983210400
  • 2013年08月24日 20:24
  • 3102

Codeforces 579D "Or" Game【贪心+暴力按位处理】

D. "Or" Game time limit per test 2 seconds memory limit per test 256 megabytes input sta...
  • mengxiang000000
  • mengxiang000000
  • 2017年03月29日 20:47
  • 263

hdu 4630 No Pain No Game (区间gcd相关x线段树or树状数组)

题意: 给定1-n的一个排列。 在一段区间,找两个位置不同的数,使得gcd最大。 思路: 因为给的序列很特殊。 首先容易想到,对1-n每个数作为约数维护一个状态。 把序列中x的倍数,按原来...
  • slowlight93
  • slowlight93
  • 2015年08月28日 02:06
  • 370

HDU - 5242 Game (树链剖分 OR dfs+贪心 待整理)

Game Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi...
  • u014665013
  • u014665013
  • 2017年04月30日 22:08
  • 367

hdu1505 City Game(DP or 扫描线?)

City Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota...
  • mystery_guest
  • mystery_guest
  • 2016年11月09日 22:24
  • 115

How to work around a possible XNA Game Studio or Windows Phone SDK install failure on Windows 8

As announced earlier today on the Building Windows 8 blog, a Windows 8 consumer preview is avail...
  • sdwyq1238
  • sdwyq1238
  • 2012年09月14日 11:10
  • 576

“Or" Game CodeForces - 578B (暴力)

You are given n numbers a1, a2, …, an. You can perform at most k operations. For each operation you ...
  • qq_36290842
  • qq_36290842
  • 2017年07月24日 11:18
  • 70

【21.37%】【codeforces 579D】"Or" Game

time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandar...
  • harlow_cheng
  • harlow_cheng
  • 2016年11月15日 11:32
  • 128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:"Or" Game
举报原因:
原因补充:

(最多只允许输入30个字)