Hihocoder 1496 寻找最大值(状态压缩 + 高位前缀和)
题目链接 Hiho 1496
设$f[i]$为二进制集合包含$i$的最大的两个数,这个东西用高维前缀和维护。
高位前缀和转移的具体方案 :枚举每一位,然后枚举每个集合,大的转移到小的。
注意合并的时候最好别用$std::sort$(我一开始被卡常数了)
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define fi first
#define se second typedef long long LL;
typedef pair <int, int> PII; int T;
int n;
int c[6];
PII f[(1 << 20) + 10];
LL ans; inline void up(PII &a, PII b){
if (b.fi > a.fi){
a.se = a.fi;
a.fi = b.fi;
} else if (b.fi > a.se){
a.se = b.fi;
} if (b.se > a.fi){
a.se = a.fi;
a.fi = a.se;
} else if (b.se > a.se){
a.se = b.se;
}
} int main(){ scanf("%d", &T);
while (T--){
scanf("%d", &n);
memset(f, -1, sizeof f); rep(i, 1, n){
int x;
scanf("%d", &x);
if (~f[x].fi) f[x].se = x;
else f[x].fi = x;
} rep(i, 0, 19){
rep(j, 0, (1 << 20) - 1){
if ((1 << i) & j){
up(f[j ^ (1 << i)], f[j]);
}
}
} ans = 0;
rep(i, 0, (1 << 20) - 1) if ((~f[i].fi) && (~f[i].se)) ans = max(ans, 1ll * i * f[i].fi * f[i].se);
printf("%lld\n", ans);
} return 0;
}
Hihocoder 1496 寻找最大值(状态压缩 + 高位前缀和)的更多相关文章
- hihocoder 1496 寻找最大值(高维前缀最大次大值)
[题目链接] https://hihocoder.com/problemset/problem/1496 [题目大意] 给定N个数A1, A2, A3, ... AN, 从中找到两个数Ai和Aj(i≠ ...
- hihocoder 1496 寻找最大值
题解: 注意到$ai$只有$1e6$这件事情肯定要枚举和这个有关的东西 考虑枚举$ai\&aj$的值就可以了 那么这个集合一定是ai,aj的子集 于是我们对每个集合从大到小枚举丢掉一位转移就行 ...
- hihoCoder week8 状态压缩·一
状态压缩 写了两个半小时 太菜了 题目链接 https://hihocoder.com/contest/hiho8/problem/1 #include <bits/stdc++.h> ...
- hihocoder 1334 - Word Construction - [hiho一下第170周][状态压缩+DFS]
题目链接:https://hihocoder.com/problemset/problem/1334 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given N wo ...
- HihoCoder第九周 状态压缩 二 与POJ2411总结
在此我向各位博友求助,特别想知道除了HihoCoder上面的结果要对1e9+7取余之外,这两道题还有什么其他的问题,都是骨牌覆盖问题,都是状态压缩+dp,为什么我能过poj2411的程序过不了Hiho ...
- hihoCoder 1044 : 状态压缩·一 状压dp
思路:状态压缩,dp(i, j)表示考虑前i个数且[i-m+1, i]的选择情况为j.如果要选择当前这个数并且,数位1的个数不超过q,则dp[i+1][nex] = max(dp[i+1][nex], ...
- [hihoCoder] #1044 : 状态压缩·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将 ...
- HihoCoder 1044 垃圾清理 (优化:状态压缩)
状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市— ...
- 【HIHOCODER 1044】题目1 : 状态压缩·一
描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市--那座城市即将举行美食节! 但是不幸的是,小Hi和小Ho并没有能够买到很好的火车票-- ...
随机推荐
- Mac 小技巧
本文的大部分技巧来自于池建强老师的<MacTalk.人生元编程>,感谢他的辛苦付出,本文多系整理而已. 终端输入说英语 说英语时我们当然希望有标准发音.在Mac中不需要字典,直接在终端里输 ...
- python 学习分享-实战篇类 Fabric 主机管理程序开发
# 类 Fabric 主机管理程序开发: # 1. 运行程序列出主机组或者主机列表 # 2. 选择指定主机或主机组 # 3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载) # 4. 充分 ...
- python中字符串是特殊的列表
for x in range(20): print 'fizz'[x%3*4::]+'buzz'[x%5*4::]or x 这个是由 Jeff Atwood推广的一个编程练习叫FizzBuzz,问题如 ...
- shell之进程
ps System V 风格 - -elF -ef -eF BSD a所有跟终端有关的进程 ...
- UVa 1326 - Jurassic Remains(枚举子集+中途相遇法)
训练指南p.59 #include <cstdio> #include <cstring> #include <cstdlib> #include <map& ...
- Windows7下打开特定的端口
往往我们发布到IIS的网站多了,80的端口不能满足的情况下,我们就会想到设定其它端口来使用.当然还可以通过改变host文件来实现,这里就不细说了.回到端口,在windows7系统下怎么实现呢?下面将带 ...
- 2-sat 学习笔记
一.问题描述 以你咕的模板题为例 题目描述 有\(n\)个布尔变量\(x_1\)~\(x_n\),另有\(m\)个需要满足的条件,每个条件的形式都是"\(x_i\)为true/false或\ ...
- fastjson对json字符串JSONObject和JSONArray互相转换操作示例
2017-03-25 直接上代码: package com.tapt.instance; import com.alibaba.fastjson.JSON; import com.alibaba.fa ...
- 用ServletContext读取.properties文件
在这里主要介绍ServletContext怎么从.properties文件中用键得到值的. ServletContext读取的.properties文件一般放在的位置有:1直接放在WebRoot下面. ...
- 转:CentOS 6.5 nginx
CentOS 6.5安装及简单配置Nginx 一.准备事项 (1) 因为nginx需要访问80端口所以请先关闭或者开放防火墙端口,和selinux. 参考命令 关闭防火墙: [root@local ~ ...