888E - Maximum Subsequence 中途相遇法
Code:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
void setIO(string a){freopen((a+".in").c_str(),"r",stdin),freopen((a+".out").c_str(),"w",stdout);}
void shutIO(){ fclose(stdin),fclose(stdout);} #define ll long long
#define maxn 50
int arr[maxn],brr[maxn],p[maxn];
int A[5000000],B[5000000],cnta,cntb;
bool cmp1(int i,int j){return i<j;} //min->max
bool cmp2(int i,int j){return i>j;} //max->min
int main(){
//setIO("sweet");
int n,mod,l,r;
scanf("%d%d",&n,&mod);
l=n/2,r=n-l;
for(int i=1;i<=l;++i)scanf("%d",&arr[i]);
for(int i=1;i<=r;++i)scanf("%d",&brr[i]);
for(int i=1;i<=22;++i) p[i]=(1<<i);
for(int sta=1;sta<p[l];++sta){
int k=sta,len=1,sum=0;
while(k>0){
if(k&1) sum=((ll)(sum+arr[len])%mod);
++len;
k>>=1;
}
A[++cnta]=sum;
}
for(int sta=1;sta<p[r];++sta){
int k=sta,len=1,sum=0;
while(k>0){
if(k&1) sum=((ll)(sum+brr[len]))%mod;
++len;
k>>=1;
}
B[++cntb]=sum;
}
sort(A+1,A+1+cnta,cmp1);
sort(B+1,B+1+cntb,cmp2);
int i,j,ans=0;
for(i=1,j=1;i<=cnta&&j<=cntb;){
while(A[i]+B[j]>=mod && j<=cntb) ++j;
if(j>cntb) break;
while(A[i]+B[j]<mod && i<=cnta) ans=max(ans,A[i]+B[j]),++i;
if(i>cnta) break;
} sort(A+1,A+1+cnta,cmp2);
sort(B+1,B+1+cntb,cmp1);
for(i=1,j=1;i<=cnta&&j<=cntb;){
while(A[i]+B[j]>=mod && i<=cnta) ++i;
if(i>cnta) break;
while(A[i]+B[j]<mod && j<=cntb) ans=max(ans,A[i]+B[j]),++j;
if(j>cntb) break;
}
printf("%d",ans);
// shutIO();
return 0;
}
888E - Maximum Subsequence 中途相遇法的更多相关文章
- uva 6757 Cup of Cowards(中途相遇法,貌似)
uva 6757 Cup of CowardsCup of Cowards (CoC) is a role playing game that has 5 different characters (M ...
- LA 2965 Jurassic Remains (中途相遇法)
Jurassic Remains Paleontologists in Siberia have recently found a number of fragments of Jurassic pe ...
- HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))
Difference Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 高效算法——J 中途相遇法,求和
---恢复内容开始--- J - 中途相遇法 Time Limit:9000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...
- Codeforces 888E - Maximum Subsequence(折半枚举(meet-in-the-middle))
888E - Maximum Subsequence 思路:折半枚举. 代码: #include<bits/stdc++.h> using namespace std; #define l ...
- 【UVALive】2965 Jurassic Remains(中途相遇法)
题目 传送门:QWQ 分析 太喵了~~~~~ 还有中途相遇法这种东西的. 嗯 以后可以优化一些暴力 详情左转蓝书P58 (但可能我OI生涯中都遇不到正解是这个的题把...... 代码 #include ...
- uva1152 - 4 Values whose Sum is 0(枚举,中途相遇法)
用中途相遇法的思想来解题.分别枚举两边,和直接暴力枚举四个数组比可以降低时间复杂度. 这里用到一个很实用的技巧: 求长度为n的有序数组a中的数k的个数num? num=upper_bound(a,a+ ...
- LA 2965 中途相遇法
题目链接:https://vjudge.net/problem/UVALive-2965 题意: 有很多字符串(24),选出一些字符串,要求这些字符串的字母都是偶数次: 分析: 暴力2^24也很大了, ...
随机推荐
- CxImage 简单配置与使用
CxImage 简单配置与使用 如果本篇文章还不能解决你在生成解决方案以及便宜过程中的问题 请参阅: http://blog.csdn.net/afterwards_/article/details/ ...
- NOIP卡常数技巧
NOIP卡常数技巧 https://blog.csdn.net/a1351937368/article/details/78162078 http://www.mamicode.com/info-de ...
- java高级——生产者消费者问题
多线程是一个很重要的应用,本节讲述多线程中同步问题 public class ThreadDemo { public static void main(String[] args) { Resourc ...
- 再次建立wordpress
山大的火星人的站还在维护www.h4ck.org.cn. 也许是募课潮过后的效应,www时代还能聚合很多知识,到了客户端时代技术越发松散,很难发实用的技术总结. 如果重新审视问题不难发现,问题在于使用 ...
- 联想lenovo 家用电脑安装win7 无法引导问题(新电脑安装系统时提示File:\Boot\BCD错误解决方案)
安装方式 : 1.进入 PE 2.用 EasyimageX 恢复 GHO镜像 3.重启后出现 原因: 主要 是安装win7 时,格式 化选择为GUID模式. 处理: win7 以后,格式华时选择MB ...
- js 将数组中的每一项安装奇偶重新组合成一个数组对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Promise语法
转自:廖雪峰的官方网站 在JavaScript的世界中,所有代码都是单线程执行的. 由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以用回调函数实现: ...
- jquery 取页面中ifram中得节点
<iframe src="html/bai.jsp" frameBorder=0 id=middle name=middle scrolling="yes" ...
- autosar
AUTOSAR – RTE(1)基本概念 1. RTE概述 The Run-Time Environment (RTE) is at the heart of the AUTOSAR ECU arch ...
- #undef 的用法
在Visual Studio2008中编写如下代码: #include <iostream> using namespace std; int main() { #define MODI ...