L - Looking for Taste Gym - 101991L 二进制枚举/思维
方法一:因为最多是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;
}
L - Looking for Taste Gym - 101991L 二进制枚举/思维的更多相关文章
- HDU - 6435 Problem J. CSGO 2018 Multi-University Training Contest 10 (二进制枚举+思维)
题意:有N个主武器(MW)和M个副武器(SW),每个武器都有自己的S值,和K个附加属性xi.要选取一对主副武器搭配,搭配后获得的性能由该公式得出: 求获得最大的性能为多少. 分析:由于|xm - xs ...
- Gym - 100712G Heavy Coins(二进制枚举)
https://vjudge.net/problem/Gym-100712G 题意:给出n枚不同价值的硬币和一个总价S,现在要选择尽量多的硬币来大于等于S,要求是比如说现在选择的硬币的总和为sum,那 ...
- Consonant Fencity Gym - 101612C 暴力二进制枚举 Intelligence in Perpendicularia Gym - 101612I 思维
题意1: 给你一个由小写字母构成的字符串s,你可以其中某些字符变成大写字母.如果s中有字母a,你如果想把a变成大写,那s字符串中的每一个a都要变成A 最后你需要要出来所有的字符对,s[i]和s[i-1 ...
- UVA1354-Mobile Computing(二进制枚举子集)
Problem UVA1354-Mobile Computing Accept:267 Submit:2232 Time Limit: 3000 mSec Problem Description ...
- HPU组队赛B:问题(二进制枚举)
时间限制1 Second 内存限制 512 Mb 题目描述 你有n个问题,你已经估计了第i个问题的难度为Ci,现在你想使用这些问题去构造一个问题集.比赛的问题集必须包含至少两个问题,而且比赛的总难度必 ...
- 牛客网 牛客练习赛43 F.Tachibana Kanade Loves Game-容斥(二进制枚举)+读入挂
链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 Tachibana Kanade Loves Game 时间限制:C/C++ 1秒,其他语言2秒 ...
- CUGBACM_Summer_Tranning1 二进制枚举+模拟+离散化
整体感觉:这个组队赛收获还挺多的.自从期末考试以后已经有一个多月没有 做过组队赛了吧,可是这暑假第一次组队赛就找回了曾经的感觉.还挺不错的!继续努力!! 改进的地方:这次组队赛開始的时候题目比較难读懂 ...
- poj1873(二进制枚举+求凸包周长)
题目链接:https://vjudge.net/problem/POJ-1873 题意:n个点(2<=n<=15),给出n个点的坐标(x,y).价值v.做篱笆时的长度l,求选择哪些点来做篱 ...
- POJ 1873 The Fortified Forest 凸包 二进制枚举
n最大15,二进制枚举不会超时.枚举不被砍掉的树,然后求凸包 #include<stdio.h> #include<math.h> #include<algorithm& ...
随机推荐
- 规则引擎之easyRules
规则引擎听起来是蛮高深的一个词语,但透过现象看本质,Martin Fowler 有如下言: You can build a simple rules engine yourself. All you ...
- json 和 pickle
用于序列化的两个模块 json:用于字符串和python数据类型间进行转换 pickle:用于python特有的类型和python的数据类型间进行转换 json模块提供了四个功能:dumps dump ...
- 第200天:js---常用string原型扩展
一.常用string原型扩展 1.在字符串末尾追加字符串 /** 在字符串末尾追加字符串 **/ String.prototype.append = function (str) { return t ...
- Period II FZU - 1901(拓展kmp)
拓展kmp板题 emm...我比较懒 最后一个字母进了vector两个1 不想改了...就加了个去重... 哈哈 #include <iostream> #include <cst ...
- java学习3-Maven的使用
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...
- 【BZOJ4522】密匙破解(Pollard_rho)
[BZOJ4522]密匙破解(Pollard_rho) 题面 BZOJ 洛谷 题解 还是\(Pollard\_rho\)的模板题. 呜... #include<iostream> #inc ...
- 测试开发linux面试之三:后台进程之操作
Hi,大家好我是Tom,继上次分享之后这次给大家带来新的知识. 进程是Linux系统中一个非常重要的概念.Linux是一个多任务的操作系统,系统上经常同时运行着多个进程.我们不关心这些进程究竟是如何分 ...
- [ZJOI2007]棋盘制作 【最大同色矩形】
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...
- SNMP-网络管理协议
SNMP协议简介: a. 轮询(Polling) -- 定时获取状态, 中断(Interrupt)--出问题通知 b. 共同体名(community) -- 口令--只读口令 --读写口令 使用SNM ...
- 【learning】加权拟阵与贪心
首先.. 这篇东西的话算是一个关于拟阵部分知识的小总结,有些语言相对来说偏向便于理解方面,所以可能..有一些说法会不是那么严谨大概是这样 一些概念 线性无关:一组数据中没有一个量可以写成其余量的线 ...