方法一:因为最多是10的六次方,所以可以直接枚举二进制上的每一位来得到最优结果。

AC代码:

#include<iostream>
#include<stack>
#include<stdio.h>
#include<queue>
#include<map>
#include<algorithm>
#include<vector>
#include<string>
#include<cmath>
#include<cstring>
using namespace std;
# define inf 0x3f3f3f3f
# define maxn 1000000+100
# define ll long long
int a[maxn];
int tempsave[maxn];
int vis[maxn];
int maxx;
vector<int>ans[20];
int n,m;
void cal(int t)
{
int num=0;
int e=t;
while(t)
{
int temp=t%2;
t/=2;
tempsave[++num]=temp;
}
for(int i=num; i>=1; i--)
{
if(tempsave[i]!=0)
{
maxx=max(i-1,maxx);
ans[i-1].push_back(e);//把和这一位有关的放进这一位上的容器里
}
}
}
ll Pow(ll t1,ll t2)
{
t2--;
ll temp=t1;
for(int i=1; i<=t2; i++)
{
temp*=t1;
}
return temp;
}
bool judge(int t)
{
int len=ans[t].size();
for(int i=0; i<len; i++)
{
int temp=ans[t][i];
if(vis[temp]==1)//如果这一位上已经有数了,返回就可以了。
{
return true;
}
}
for(int i=0; i<len; i++)
{
int temp=ans[t][i];
if(vis[temp]==0)//如果这一位上之前没有数,并且找到了,然后就直接用就可以了。因为二进制的话,越靠前肯定是越大的。
{
m--;
vis[temp]=1;
return true;
}
}
return false;//如果都没有找到,返回false
}
int main()
{
// freopen("looking.in","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
maxx=0;
for(int i=0; i<50; i++)ans[i].clear();
memset(vis,0,sizeof(vis));
scanf("%d %d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
cal(a[i]);
}
ll sum=0;
int t=0;
for(int i=maxx; i>=0; i--)
{
if(m==0)break;
if(judge(i))
{
if(i==0)sum+=1;
else
sum+=Pow(2,i);
}
}
printf("%d\n",sum);
}
return 0;
}

方法二:看数据,直接把所有的数“|”就完事了,因为给的数是大于20的。。。。、

AC代码:

#include<iostream>
#include<stack>
#include<stdio.h>
#include<queue>
#include<map>
#include<algorithm>
#include<vector>
#include<string>
#include<cmath>
#include<cstring>
using namespace std;
# define inf 0x3f3f3f3f
# define maxn 100000+100
# define ll long long
ll a[maxn];
int main()
{
// freopen("looking.in","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
}
ll sum=0;
for(int i=1; i<=n; i++)
{
sum=sum|a[i];
}
printf("%d\n",sum);
}
return 0;
}

最新文章

  1. 初探React-Native
  2. Geolocation API JavaScript访问用户的当前位置信息
  3. Python 打印99乘法口诀表
  4. C语言实现简单php自定义扩展
  5. Java命名约定
  6. JSP简单标签带属性开发
  7. UIActionSheet和UIAlert
  8. HDU 4597 记忆化搜索
  9. CentOS6.2编译安装codelite5.3
  10. android Permission 访问权限许可
  11. Linux统计文件夹下文件信息
  12. 《Programming WPF》翻译 第9章 2.选择一个基类
  13. Java集合常见面试题集锦
  14. qscoj 128 喵哈哈村的魔法源泉(2)(模仿快速幂,好题)
  15. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演
  16. 深入解读MySQL8.0 新特性 :Crash Safe DDL
  17. [20190401]跟踪dbms_lock.sleep调用.txt
  18. 桂林电子科技大学第三届ACM程序设计竞赛 G 路径
  19. Centos7中在线/离线安装DockerCE最新版
  20. 净资产收益率ROE连续3年超过15%的股票排名

热门文章

  1. 在dbgrid中如何多行选中记录(ctl与shift均可用)
  2. DNS原理及解析过程
  3. fiddler启动报错Unable to bind to port [8888],ErrorCode:10106
  4. 第189天:BOM属性方法
  5. jquery 集合注意点
  6. BZOJ3711 PA2014Druzyny(动态规划+cdq分治+线段树)
  7. [BZOJ4027]兔子与樱花
  8. BZOJ1072 排列perm 【状压dp】
  9. 洛谷 P2258 子矩阵
  10. 函数式编程(1)-高阶变成(2)-filter