玲珑oj 1028 贪心
http://www.ifrog.cc/acm/problem/1028
很有趣的一道题,求从n个数里挑出不同的两个,使得他俩'|','&','^'后的值尽量大,求这个最大的结果。
求最大的异或值想到了trie树的一个经典操作,对于按位与,要两个位置都是1才会出现1,我们肯定要贪心操作,优先使高位为1,
这也可以在trie上完成,如果这个位置1的个数>=2,至少有两个以这个前缀开头的数字,我们就认为这个位置可以为1,再往下走考虑下一位,
如果1的个数不满足得话,说明这一位肯定是0了,此时要进行一步合并操作,将0下面的部分合并到1上,因为此位不必要是1所以0/1都可以。
对于'|',有点复杂我感觉,我们考虑遍历每个数字,是1得位我们就不必管了,然后从最高位的0开始看看是否能变为1.
例如,对于1000(2),我们首先找有没有x100(2),如果有再找x110(2),高位如果找不到了就找低位,最后得到的就是最大值,
我们预处理出每个数能拆出来的数,1001->1000,0001,1001。。。依次类推,用一个标记数组。
之后循环每一个数的时候,记录由高位到低位'0'出现的位置,之后贪心高位找到最大的,只要标记过这个数就表示可以进行或操作。
#include<bits/stdc++.h>
using namespace std;
int num[],a[];
int ch[][],cnt[],sz;
void irt(int x)
{
int p=;
for(int i=;i>=;--i){
int bit=(x&(<<i))?:;
if(ch[p][bit]==-)
{
ch[sz][]=ch[sz][]=-;
cnt[sz]=;
ch[p][bit]=sz++;
}//cout<<p<<endl;
p=ch[p][bit];
cnt[p]++;
}
}
void uno(int &x,int y)
{
if(y==-) return;
if(x==-) {ch[sz][]=ch[sz][]=-;cnt[sz]=;x=sz++;}
cnt[x]+=cnt[y];
uno(ch[x][],ch[y][]);
uno(ch[x][],ch[y][]);
}
int solve1(int n)
{
int p=,ret=;
for(int i=;i>=;--i){
if(ch[p][]!=-&&cnt[ch[p][]]>=)
ret|=(<<i);
else uno(ch[p][],ch[p][]);
p=ch[p][];
}
return ret;
} int solve2(int x)
{
int ret=,p=;
for(int i=;i>=;--i){
int bit=(x&(<<i))?:;
if(ch[p][bit^]!=-) {p=ch[p][bit^];ret|=(<<i);}
else p=ch[p][bit];
if(p==-) break;
}
return ret;
}
bool dp[(<<)];
int solve3(int n)
{
int i,j,ret=;
memset(dp,,sizeof(dp));
for(i=;i<=n;++i) dp[a[i]]=;
for(i=(<<);i>=;--i)
{
for(j=;j>=;--j)
{
if(!(i&(<<j))) dp[i]|=dp[i|(<<j)];
}
}
int t[],p=;
for(i=;i<=n;++i)
{
p=;
for(j=;j>=;--j)
if(!(a[i]&(<<j))) t[p++]=(<<j);
int x=;
for(j=;j<p;++j)
{
if(dp[x|t[j]]) x|=t[j];
}
ret=max(ret,x|a[i]);
}
return ret;
}
int main()
{
int i,j,k,n,m,t,op; // freopen("in.txt","r",stdin);
cin>>t;
for(int cas=;cas<=t;++cas)
{
sz=;
int xo=;
cin>>n>>op;
memset(num,,sizeof(num));
ch[sz][]=ch[sz++][]=-;cnt[]=;
for(i=;i<=n;++i)
{
scanf("%d",a+i);
if(op==) xo=max(xo,solve2(a[i]));
irt(a[i]);
}
printf("Case #%d: ",cas);
switch(op){
case :cout<<solve1(n)<<endl;break;
case :cout<<xo<<endl;break;
case :cout<<solve3(n)<<endl;break;
}
}
return ;
}
玲珑oj 1028 贪心的更多相关文章
- 玲珑学院OJ 1028 - Bob and Alice are playing numbers 字典树,dp
http://www.ifrog.cc/acm/problem/1028 题解处:http://www.ifrog.cc/acm/solution/4 #include <cstdio> ...
- Light OJ 1028 - Trailing Zeroes (I) (数学-因子个数)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1028 题目大意:n除了1有多少个因子(包括他本身) 解题思路:对于n的每个因子 ...
- 玲珑oj 1117 线段树+离线+离散化,laz大法
1117 - RE:从零开始的异世界生活 Time Limit:1s Memory Limit:256MByte Submissions:438Solved:68 DESCRIPTION 486到了异 ...
- 九度OJ 1028:继续畅通工程 (最小生成树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3140 解决:1338 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...
- oj教程--贪心
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法不是对所有问题都能得到整体最优解,关键是 ...
- SWUST OJ(1028)
特定字符序列的判断 #include <iostream> #include <cstdlib> #include <stack> #include <str ...
- 玲珑OJ 1129 - 喵哈哈村的战斗魔法师丶坏坏い月
1129 - 喵哈哈村的战斗魔法师丶坏坏い月 Time Limit:3s Memory Limit:256MByte Submissions:315Solved:71 DESCRIPTION 坏坏い月 ...
- 玲珑oj 1121 思维
1121 - Reverse the lights Time Limit:2s Memory Limit:256MByte Submissions:376Solved:111 DESCRIPTION ...
- 玲珑oj 1128 RMQ模板
1128 - 咸鱼拷问 Time Limit:3s Memory Limit:128MByte Submissions:380Solved:118 DESCRIPTION 给你两个序列A,B.每个序列 ...
随机推荐
- 最新zencart支付宝插件(支持1.5)
最新zencart支付宝插件(支持1.5) 最新zencart支付宝插件(支持1.5) 支付宝接口的兼容性真不错,时至今日还能用,想利用zencart来做国内时长还真是方便多了,朋友们可以试试. ...
- PKU 1204 Word Puzzles(AC自动机)
题目大意:原题链接 给定一个字符串矩阵和待查找的单词,可以朝8个不同的方向查找,输出待查找单词第一个字母在矩阵中出现的位置和该单词被查到的方向. A~H代表8个不同的方向,A代表正北方向,其他依次以4 ...
- kubernetes上安装MongoDB-3.6.5集群副本集方式
一.安装部署: 想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错): 1.生成docker镜像: docker build -t 144.202.127.156/library/ ...
- 开源BBS论坛软件推荐
七款开源BBS论坛软件推荐(1) 本文介绍了七个开源的BBS论坛软件(在英文界一般叫做Forum).可能国内的朋友们比较熟悉Discuz!和PHPwind,但其实我们的选择还是很多的,而且下面介绍的这 ...
- org.apache.ibatis.binding.BindingException: Mapper method 'attempted to return null from a method with a primitive return type (long).
一.问题描述 今天发现测试环境报出来一个数据库相关的错误 org.apache.ibatis.binding.BindingException: Mapper method 'attempted to ...
- spoj1812 LCS2 - Longest Common Substring II
地址:http://www.spoj.com/problems/LCS2/ 题面: LCS2 - Longest Common Substring II no tags A string is fi ...
- 仿netty线程池简化版本
package com.hcxy.car.threadpools; import java.io.IOException; import java.nio.channels.Selector; imp ...
- iOS开发之NSUserDefaults
在ios中偏好设置保存用户配置的对象 //NSUserDefaults读取 //获取标准函数对象 //通过对象获取名称下NSMutableDictionary数据 NSUserDefaults *de ...
- [转] 把eclipse设置为黑色主题 方式二
首先,废话不多说,给大家看一下我设置成黑色主题后的效果: 至于怎么达到这个效果呢,首先是中间的编辑区. 从我的云盘里下载压缩包,解压到eclipse目录的dropins文件夹下,你就会有各种各样的编辑 ...
- 设置 vadio 和checkbox是否选中
1.js方案 <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>te ...