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也很大了, ...
随机推荐
- [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)
题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...
- Linux进程精讲
进程相关概念 程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁....) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃的程序,占用系 ...
- 133.throw机制 抛出类类型
#include <iostream> using namespace std; //try尝试执行,抛出throw,throw之后语句不再执行 //catch处理throw的异常 voi ...
- KafkaZookeeper1-整体介绍
版本 1.0.0 概述 本文介绍了 kafka 中 zookeeper 的整体实现. 最初 kafka 使用同步的方式访问 zookeeper.但是对于 partition 个数很多的cluster, ...
- Html表单提交到Servlet输出到页面乱码
Html使用的编码是UTF-8编码显示页面,之后使用form表单提交字段到Servlet中,Servlet将利用getParamer方法获得form提交的字段,之后通过Respone中的writer将 ...
- FCC高级编程篇之Validate US Telephone Numbers
Validate US Telephone Numbers Return true if the passed string is a valid US phone number. The user ...
- [NOIP补坑计划]NOIP2012 题解&做题心得
场上预计得分:100+90+70+100+100+3060=490520(省一分数线245) 题解: D1T1 Vigenère 密码 题面 水题送温暖~~ #include<iostream& ...
- luogu P2041 分裂游戏(结论题)
题意 题解 一开始理解错题意了.以为这题不可解.. 其实这题当n>=3时都是无解的 然后n=1,2时的解都给出来了. 推荐一个博客的证明 #include<iostream> #in ...
- 找tensorboard
一开始因为用户不对,提示tensorboard:未找到命令 切换正确账户寻找tensorboard 然后打开Xstart,输入firefox,把链接输入进去 即可
- caioj 1155 同余方程组(模版)
第一步,和同余方程一样,转化一下 两式相减得 这就转化为了求不定方程,用exgcd 求出x,要化成最小正整数解,避免溢出 然后可以求出P出来. 这个时候要把前两个式子转化成一个式子 设求出来的是P' ...