这题有两种做法,一种是二分,我很快就想到了(nlogn的复杂度,10^6的n).
第二种就是贪心了,我觉得这个不那么容易想到,好像速度要快一些.
首先,我们找答案的两个数x,y,有两种,一种是x+y>p,一种是x+y< p ,(读入时把每一个都mod p) 那么第一种如果存在,那么最大值一定是数组最大值加次大值的mod.第二种的最大值,就是我们要关心的事情了.
第一种我们直接使用二分,每一个a[i],我们都二分的搜索他的最大希望值p-a[i]-1,这个二分是我手写的,因为不知道upperbound和lowerbound怎么在这里使用了,找到小于等于希望值的第一个数,这是显然的思路.当然这题我wa了几万次,问题就出在这里了,没有考虑清楚如果搜索到的位置和i重合时要特殊处理,如果找到位置重合但不是0,那么就把找到位置左移一个,如果是0,那就不算他了(因为如果要算,他也只能是第一种情况).
第二种是一种逼近的贪心思想,每一次都要找到使a[i]+temp< p最大的temp值,也就是从数组的两头夹过来,注意处理接头时,我也wa了很多次.
代码见下

/*  xzppp  */
#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <map>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <list>
#include <math.h>
#include <iomanip>
using namespace std;
#define FFF freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mp make_pair
typedef long long  LL;
typedef unsigned long long ULL;
const int MAXN = 100000;
const int  INF = 0x7fffffff;
const int MOD = 1e9+7;
LL a[MAXN+17];
int main()
{//FFFLL n,p;while(scanf("%lld%lld",&n,&p)!=EOF){memset(a, 0, sizeof(a));LL ans = -INF;for (int i = 0; i < n; ++i){scanf("%lld",a+i);a[i] = a[i]%p;}sort(a, a+n);ans = (a[n-1]+a[n-2])%p;for (int i = 0; i < n; ++i){LL temp = p-a[i]-1;int l = 0,r = n;while(r-l>1){int mid = (l+r)/2;if(a[mid]>temp)r = mid;elsel = mid;}if(l!=i)ans = max((a[i]+a[l])%p,ans);else if(l==0)ans = max((a[i]+a[n-1])%p,ans);elseans = max((a[i]+a[l-1])%p,ans);}printf("%lld\n",ans);}return 0;
}
/*  xzppp  */
#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <map>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <list>
#include <math.h>
#include <iomanip>
using namespace std;
#define FFF freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mp make_pair
typedef long long  LL;
typedef unsigned long long ULL;
const int MAXN = 100000;
const int  INF = 0x7fffffff;
const int MOD = 1e9+7;
LL a[MAXN+17];
int main()
{//FFFLL n,p;while(scanf("%lld%lld",&n,&p)!=EOF){memset(a, 0, sizeof(a));LL ans = -INF;for (int i = 0; i < n; ++i){scanf("%lld",a+i);a[i] = a[i]%p;}sort(a, a+n);ans = (a[n-1]+a[n-2])%p;int rt = n-1;for (int i = 0; i < n&&i <rt; ++i){while(a[i]+a[rt]>=p) rt--;if(i<rt) ans = max(ans,(a[i]+a[rt])%p);}printf("%lld\n",ans);}return 0;
}

HDU - 5265 pog loves szh II (二分或者贪心)相关推荐

  1. hdu 5265 pog loves szh II

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5265 pog loves szh II Description Pog and Szh are pla ...

  2. hdu 5265 pog loves szh II STL

    pog loves szh II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  3. HDU 5265 pog loves szh II(二分)

    题意: 给出n,p,n个数,从中取两个数 a,b , 求出( a + b )% p 的最大值. 解析: 先把每个数%p , 可以发现两个数加起来,要么 < p,要么 ≥ p,然后小于 2p. 那 ...

  4. HDOJ 5265 pog loves szh II

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5265 题意很简单,给我们n个数,和一个p,从n个数中取两个数A和B,问我们能够得到的最大的(A+B)% ...

  5. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an ...

  6. BestCoder Round #43 第二题 pog loves szh II

    pog loves szh II  Accepts: 219  Submissions: 834  Time Limit: 4000/2000 MS (Java/Others)  Memory Lim ...

  7. hdu 5264 pog loves szh I

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5264 pog loves szh I Description Pog has lots of stri ...

  8. HDU 5266 pog loves szh III【LCA RMQ】

    B - pog loves szh III 题目:添加链接描述 题意:找出区域l到r的LCA->找l和r的LCA 分析: 链式前向星存树,先用dfs处理结点倍增关系. 然后从循环处理较深结点,直 ...

  9. HDU 5266 pog loves szh III (LAC)

    问题描述 pog在与szh玩游戏,首先pog在纸上画了一棵有根树,这里我们定义1为这棵树的根,然后szh在这棵树中选了若干个点,想让pog帮忙找找这些点的最近公共祖先在哪里,一个点为S的最近公共祖先当 ...

最新文章

  1. WebSocket 集群解决方案
  2. Android studio使用心得(二)— 打包签名apk发布
  3. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第8章-二阶连续时间多智能体系统加权一致性
  4. Keras梯度累积优化器:用时间换取效果
  5. javascript 获取应用程序根路径
  6. AWVS/Nessus/Burpsuite的简单使用
  7. 超过响应缓冲区限制_Nginx如何限制并发连接数和连接请求数?
  8. Python使用matplotlib设置pandas绘制的饼状图扇形标签
  9. VBScript编程教程 [下]
  10. 牛顿柯特斯公式及复合形式、龙贝格求积公式,高斯勒让德求积公式
  11. php后端自学,【后端开发】自学php有哪些好的方法
  12. 基于python的证件照_不到20行实现Python代码即可制作精美证件照
  13. 小木工 ____农民工纪事之一
  14. 用计算机刻录光盘,刻录光盘,教您如何使用计算机将文件刻录到光盘上.
  15. [python]用flask框架搭建微信公众号的后台
  16. 从用AI+VR虚拟教室穿越到中国说起,看红头文件下,互联网教育公司的AI招牌
  17. 2014年中南大学复试-安全路径
  18. 中国天气网api接口
  19. 上海航芯|电池均衡如何提高电池寿命
  20. 经典乘法口诀表(C++)

热门文章

  1. 论坛报名 | 语音与自然语言处理的最新突破和前沿趋势。道翰天琼认知智能平台为您揭秘新一代人工智能。
  2. 华为服务器清除系统日志,清除服务器日志
  3. java 车牌号验证正则表达式_使用正则表达式验证手机号、车牌号
  4. 更换Dell笔记本512G SSD硬盘克隆到2T SSD步骤,不需要重做系统
  5. 《程序员2010精华本》
  6. 使用高通QXDM工具实现Android设备网络制式更改(如仅注册LTE网络)(独家!)
  7. 18个优秀的在线图片编辑服务网站 | 可能吧
  8. 【微信小程序】随手笔记
  9. WPS拼音指南乱用;切换域代码乱用
  10. 天刀开放冬至垂钓新弄法 冬季暖心五年夜运动-新浪天边明月刀专区