CF 888E Maximum Subsequence——折半搜索
2024-09-29 14:50:10
题目:http://codeforces.com/contest/888/problem/E
一看就是折半搜索?……然后排序双指针。
两个<m的数加起来如果>=m,一定不会更新答案。因为-m后的值比原来的两个数都小(a+b-m<a+m-m),不如它们去加0;
而如果两个数加起来<m,值比它们都大,可能更新答案。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
int n,m,jx,a[N],b[M],t1,c[M],t2,ans;
int up(int a,int b){a+=b;a>=m?a-=m:;return a;}
void dfs(int cr,int lm,int lj,bool fx)
{
if(cr>lm)
{
fx?b[++t1]=lj:c[++t2]=lj;
return;
}
dfs(cr+,lm,lj,fx);
dfs(cr+,lm,up(lj,a[cr]),fx);
}
int main()
{
scanf("%d%d",&n,&m); jx=n>>;
for(int i=;i<=n;i++)scanf("%d",&a[i]),a[i]%=m;
dfs(,jx,,); dfs(jx+,n,,);
sort(b+,b+t1+); t1=unique(b+,b+t1+)-b-;
sort(c+,c+t2+); t2=unique(c+,c+t2+)-c-;
int p0=t2;
for(int i=;i<=t1;i++)
{
while(b[i]+c[p0]>=m)p0--;
ans=max(ans,b[i]+c[p0]);
}
printf("%d\n",ans);
return ;
}
最新文章
- HDU 4041 Eliminate Witches! --模拟
- python 字符串格式化 (%操作符)
- 51nod1379 索函数
- TensorFlow学习之运行label_image实例
- 数学:lucas定理的总结
- android SDK开发 -- TitleBar封装(一)
- html2canvas截屏用法
- Jdk1.6编译,1.7执行,1.7中没有需要的类,为何不会报错
- 奇怪的跨域访问:No &#39;Access-Control-Allow-Origin&#39; header
- 常见问题2:html+css效果综合整理
- ABP框架系列之三十五:(MVC-Controllers-MVC控制器)
- CSS 居中布局
- Linux命令之sed
- PAT 1081 检查密码(15) (代码+思路)
- TCxGrid 把列移上移下。
- iOS开发--NSDateFormatter
- MySQL Crash Course #11# Chapter 20. Updating and Deleting Data
- week4a:个人博客作业
- 关于Jquery使用中遇到典型问题集锦
- 实战MEF(1)一种不错的扩展方式