题意:n个数字,最多操作k次,每次乘x,要使结果数组的与值最大。

能推断出结果是对一个元素操作k次,并且这个元素的二进制最高位比较大。并不一定是取最大的,比如1100和1010,乘以一次2,两种选法分别为11000|1010=11010,;;;1100|10100=11100后者更大。

有没有可能k次乘在不同的数字上呢?不可能。如果有3个数字abc二进制最高位都是第5位,k=3,x=2,假如乘了一次a,再乘两次a,与的结果是8位。如果放弃a,去乘别的,只有7位以下。

实现过程中,用一个数组arr记录每个位的出现数。比如9是1001,那么++arr[0],++arr[3]。对当前元素,减掉它的贡献,加上乘法操作后的贡献,然后与起来看是不是更大,最后输出最大的。

乱码:

//#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include <stack>
#include <iomanip>
using namespace std;
const int SZ=,INF=0x7FFFFFFF;
const double EPS=1e-;
typedef long long lon; int arr[];
lon num=; int main()
{
std::ios::sync_with_stdio();
lon maxv=,maxid=;
//freopen("d:\\1.txt","r",stdin);
//for(;scanf("%d",&n)!=EOF;)
{
lon n,k,x;
cin>>n>>k>>x;
vector<lon> vct;
for(int i=;i<n;++i)
{
lon tmp;
cin>>tmp;
vct.push_back(tmp);
}
for(int i=;i<n;++i)
{
lon cur=vct[i];
for(int j=;(num<<j)<=cur;++j)
{
if(cur&(num<<j))
{
++arr[j];
}
}
}
for(int i=;i<n;++i)
{
lon cur=vct[i];
lon res=;
for(int j=;(num<<j)<=cur;++j)
{
if(cur&(num<<j))
{
--arr[j];
}
}
for(int j=;j<;++j)
{
if(arr[j])
{
res|=(num<<j);
}
} lon a=cur;
for(int j=;j<k;++j)
{
a*=x;
} res|=a;
//cout<<res<<endl;
if(res>maxv)
{
maxv=res;
maxid=i;
} for(int j=;(num<<j)<=cur;++j)
{
if(cur&(num<<j))
{
++arr[j];
}
}
} lon res=;
for(int i=;i<n;++i)
{
if(i!=maxid)
{
res|=vct[i];
}
else
{
res|=maxv;
}
}
cout<<res<<endl;
}
return ;
}

codeforces 578b//"Or" Game// Codeforces Round #320 (Div. 1)的更多相关文章

  1. [Codeforces] Round #320 (Div.2)

    1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...

  2. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C. Weakness and Poorness 三分 dp

    C. Weakness and Poorness Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  3. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B. "Or" Game 线段树贪心

    B. "Or" Game Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/578 ...

  4. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B. "Or" Game

    题目链接:http://codeforces.com/contest/578/problem/B 题目大意:现在有n个数,你可以对其进行k此操作,每次操作可以选择其中的任意一个数对其进行乘以x的操作. ...

  5. codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. "Or" Game(暴力,数学)

    解题思路:就是求数 n 对应的二进制数中有多少个 1 #include <iostream> #include<cstdio> using namespace std; int ...

  6. Codeforces Round #320 (Div. 2) D. "Or" Game 数学

    D. "Or" Game time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. codeforces 578a//A Problem about Polyline// Codeforces Round #320 (Div. 1)

    题意:一个等腰直角三角形一样的周期函数(只有x+轴),经过给定的点(a,b),并且半周期为X,使X尽量大,问X最大为多少? 如果a=b,结果就为b 如果a<b无解. 否则,b/(2*k*x-a) ...

  8. codeforces 578c//Weakness and Poorness// Codeforces Round #320 (Div. 1)

    题意:一个数组arr,一个数字x,要使arr-x的最大子段最小,问该最小值. 三分x,复杂度logn,内层是最大子段的模板,只能用n复杂度的.因为是绝对值最大,正负各求一次,取大的.精度卡得不得了,要 ...

  9. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] E. Weakness and Poorness 三分

    E. Weakness and Poorness time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

随机推荐

  1. Linux命令: 结束命令

    1)ctrl+c,退出命令 2)q,退出文件

  2. 检测u盘是否挂载上方法

    打开内核log:echo "8" > /proc/sys/kernel/printk 关闭内核log:echo "1" > /proc/sys/ke ...

  3. 解析分布式锁之Zookeeper实现(一)

    实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,本文主要阐述基于Zookeeper的分布式锁,其他两种会在后文中一起探讨.现在我们来看下使用Zookeeper如 ...

  4. Linux查看文件大小命令

    Linux查看文件大小命令 du命令 (1)du -b filepath 参数-b表示以字节计数 du -b filepath 参数-b表示以字节计数 #示例: $ du -b ~/Downloads ...

  5. 20145127《java程序设计》第八周学习总结

    一.教材学习内容总结 第十四章 NIO与NIO2 NIO(New IO)-from JDK1.4 NIO2 -from Java SE 7 14.1 认识NIO Channel: 衔接数据节点(与IO ...

  6. noip2015 day1

    不解释,很简单,直接按照题目的方法构造就行了 Code #include<iostream> #include<cstdio> #include<cctype> # ...

  7. Duilib应用修改程序图标方法(转载)

    转载:http://www.cnblogs.com/lanzhi/p/6468596.html 本文向大家介绍如何修改duilib应用图标,对于win32或者mfc应用来说,我们可以在注册窗口类时指定 ...

  8. Qt Designer中文入门教程

    Qt Designer窗口布局Layouts提供了四种布局方法,他们是: Vertical Layout 纵向布局Horizontal Layout 横向布局Grid Layout  栅格布局Form ...

  9. HDU 6162 Ch's gift(树链剖分+线段树)

    题意: 已知树上的每个节点的值和节点之间的关系建成了一棵树,现在查询节点u到节点v的最短路径上的节点值在l到r之间的节点值的和. 思路: 用树链剖分将树映射到线段树上,线段树上维护3个值,max,mi ...

  10. 51nod 1076 2条不相交的路径(边双连通分量)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1076 题意: 思路: 边双连通分量,跑一遍存储一下即可. #includ ...