AtCoder Regular Contest 100 (ARC100) E - Or Plus Max 其他
原文链接https://www.cnblogs.com/zhouzhendong/p/9251448.html
题目传送门 - ARC100E
题意
给定一个正整数 $n(n\leq 18)$。
然后给定一行共 $2^n$ 个正整数 $a_0,a_1,\cdots,a_{2^n-1}$ 。
对于每一个 $k(1\leq k<2^n)$ ,输出满足 $i\ OR\ j \leq k$ 的最大 $a_i+a_j$ 值。
题解
看到这题的心情:为啥不早做这题!!这题过的人怎么这么少??
连我都只想了几分钟,那么那些大佬是不是都一眼秒?
好了讲题:
考虑对于每一个 $k$ 处理出满足 $k\ OR\ x=k$ 的所有 $x$ 中 $a_x$ 最大的两个。其中 $k=0$ 的时候特殊一点注意一下。
具体怎么求???
考虑一个 $k$ 要处理的东西,可以从两个方面继承:一个是自己本身的数 $a_k$ ,另一部分是把 $k$ 的任意一个非零位换成 $0$ 得到的 $k^{\prime}$ 的结果。
然后回到原题,弄个前缀 $\max$ 就好了。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=1<<19;
int n,s,a[N];
int id[N][2];
bool cmp(int A,int B){
return a[A]<a[B];
}
int main(){
scanf("%d",&n);
s=1<<n;
for (int i=0;i<s;i++)
scanf("%d",&a[i]);
a[s]=-1;
id[0][0]=0,id[0][1]=s;
for (int i=1;i<s;i++){
id[i][0]=i,id[i][1]=s;
int x[4];
for (int j=0;j<n;j++)
if (i&(1<<j)){
int _i=i^(1<<j);
x[0]=id[i][0],x[1]=id[i][1];
x[2]=id[_i][0],x[3]=id[_i][1];
sort(x,x+4,cmp);
id[i][0]=x[3],id[i][1]=x[2]==x[3]?x[1]:x[2];
}
}
int mx=0;
for (int i=1;i<s;i++){
mx=max(mx,a[id[i][0]]+a[id[i][1]]);
printf("%d\n",mx);
}
return 0;
}
AtCoder Regular Contest 100 (ARC100) E - Or Plus Max 其他的更多相关文章
- AtCoder Regular Contest 100 (ARC100) D - Equal Cut 二分
原文链接https://www.cnblogs.com/zhouzhendong/p/9251420.html 题目传送门 - ARC100D 题意 给你一个长度为 $n$ 的数列,请切 $3$ 刀, ...
- AtCoder Regular Contest 100 Equal Cut
Equal Cut 思路: 枚举中间那个分界点,然后两边找使得切割后差值最小的点,这个可以用双指针 代码: #include<bits/stdc++.h> using namespace ...
- AtCoder Regular Contest 100 E - Or Plus Max
一道很好的dp题 dp[K]存的是 i满足二进制1属于K二进制1位置 最大的两个Ai 这样dp[K]统计的两个数肯定满足(i | j) <= K 然后不断做 update(dp[i | (1&l ...
- AtCoder Regular Contest 100
传送门 C - Linear Approximation 题意: 求 \[ \sum_{i=1}^nabs(A_i-(b+i)) \] \(A_i,b\)给出. 思路: 将括号拆开,变为\(A_i-i ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 097
AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
随机推荐
- 基于数组的循环队列(C++模板实现)
循环队列使用数组实现的话,简单.方便.之前实现的队列,当尾端索引到达队列最后的时候,无论前面是否还有空间,都不能再添加数据了.循环队列使得队列的存储单元可以循环利用,它需要一个额外的存储单元来判断队列 ...
- UVA 1395 MST
给你一个图, 求一个生成树, 边权Max – Min 要最小,输出最小值, 不能构成生成树的 输出 -1: 思路: Keuksal 算法, 先排序边, 然后枚举 第一条边, 往后加入边, 直到有 n- ...
- Mysql41道练习题
1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号.ps:针对的是自己的生物成绩比物理成绩高,再把符合条件的学生的学号查出来: # 查到 生物 和 物理的 id: sele ...
- Android性能优化:手把手带你全面实现内存优化
前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录 1. 定义 优化处理 应用程序的内存使用.空间占用 2. 作用 避免因不正确使用内 ...
- python 面向对象编程(高级篇)
飞机票 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对 ...
- FlashBack 闪回
[学习目标] Flashback Database 功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到 过去的某个时点的状态,这个功能依赖于Flashback log日志.比RMAN 更快速 ...
- 《Oracle DBA工作笔记:运维、数据迁移与性能调优》 PDF 下载
一:下载途径 二:本书图样 三:本书目录 第1篇 数据库运维篇第1章 数据库安装配置1.1 安装前的准备 11.2 安装数据库软件 51.2.1 方法1:OUI安装 61.2.2 方法2:静默安装 8 ...
- Confluence 6 数据库表和参考
扩展下面的链接来显示主要的表格和每一个表格的外键. 单击这里来显示/隐藏表格... AO_9412A1_AOUSER ID AO_9412A1_USER_APP_LINK USER_ID fk_ao ...
- web的分页方法
web分页的三种方式,闲来无事总结一下. 1.使用前端表格插件进行分页 例如用bootstrap的拓展table组件,注意设置其分页属性时设置为"client", 即是 sideP ...
- Java 11 这 8 个逆天新特性教你写出更牛逼的代码!
美国时间2018年 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本. 为什么说是长期版本,看下面的官方发布的支持路线图表. 可以看出 Jav ...