HDU 5265 pog loves szh II (二分查找)
【题目链接】click here~~
【题目大意】在给定 的数组里选两个数取模p的情况下和最大
【解题思路】:
思路见官方题解吧~~
弱弱献上代码:
- Problem : 5265 ( pog loves szh II ) Judge Status : Accepted
- RunId : 13961817 Language : G++ Author : javaherongwei
- Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- const int N=1e6;
- __int64 num[N],n,m,p,k,ans,cnt,sum;
- int my_pow(int a,int n,int mod)
- {
- int ans=a,tmp=1;
- while(n)
- {
- if(n&1) tmp*=ans;
- ans*=ans%mod;
- n>>=1;
- }
- return tmp;
- }
- int main()
- {
- while(~scanf("%I64d%I64d",&n,&p))
- {
- for(int i=0; i<n; ++i)
- {
- scanf("%I64d",&num[i]);
- num[i]%=p;
- }
- sort(num,num+n);
- __int64 maxx=(num[n-1]+num[n-2])%p;///另外一种情况最大值
- __int64 maxx2;
- for(int i=0; i<n; ++i)
- {
- maxx2=upper_bound(num,num+n,p-num[i]-1)-num-1;
- if((num[i]+num[maxx2])<p&&(maxx2>i))
- maxx=max((num[i]+num[maxx2])%p,maxx);
- }
- printf("%I64d\n",maxx);
- }
- return 0;
- }
- /*
- 因为序列中的数可能超过P,所以将全部的数读入后进行取模操作。
- 之后将取模后的全部数从小到大排序。题目要求我们求不同位置的两个数的和在取模意义下的最大值。
- 而如今全部数都是小于P且排好序的。因此设我随意选了两个数是X和Y,显然0≤X+Y≤2P−2。
- 若X+Y<P,则这次选数的答案就是X+Y,若X+Y≥P。则答案是X+Y−P。
- 那么我们能够这样做:将当中最大的两个数字相加取模,设为一个可能的答案记录在ANS中。
- 这个答案是另外一种情况的最大值。再对排序好的序列进行枚举,对每一个枚举到的数,
- 找出最大的数,使这个数与枚举到的数相加后的和最大且小于P,将之记为可能的答案并于之前找到的最大值ANS进行比較。
- 这个答案是第一种情况中的可能的最大值。而普通的枚举是要超时的,可是我们发现假设从小到大枚举第一个数,
- 那么还有一个匹配的数显然是从大到小的,因此能够用一个NOW记录当前还有一个匹配的数的位置,
- 每次枚举时NOW递减至符合条件。能够做到O(n)的时间复杂度。
- 综上所述,时间复杂度为高速排序的O(nlogn),空间复杂度为O(n)。注意一些特殊情况如同一个位置不能多次选。
- 4 4
- 1 2 3 0
- 4 4
- 0 0 2 2
- Sample Output
- 3
- 2
- */
HDU 5265 pog loves szh II (二分查找)的更多相关文章
- HDU 5265 pog loves szh II 二分
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5265 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
- 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 ...
- 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? ...
- HDU 5265 pog loves szh II (技巧)
题意:给一个数字序列,要求再其中找到两个数,其和再模p的结果是最大的,求此和. 思路:先将输入的元素模p,排序.结果可能有两种情况: (1)a+b大于p:肯定由两个最大的数之和来产生. (2)a+b小 ...
- 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II
题目传送门 /* 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 当然有可能两个数和超过p,那么an的值最优,每 ...
- hdu 5266 pog loves szh III(lca + 线段树)
I - pog loves szh III Time Limit:6000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I ...
- 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 ...
- hdu 5264 pog loves szh I 水题
pog loves szh I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- HDU 5266 pog loves szh III(区间LCA)
题目链接 pog loves szh III 题意就是 求一个区间所有点的$LCA$. 我们把$1$到$n$的$DFS$序全部求出来……然后设$i$的$DFS$序为$c[i]$,$pc[i]$为$c ...
随机推荐
- CE工具里自带的学习工具--第五关
图解: 此时会弹出一个对话框,选择是就可以了,最终会看到:
- 使用GetLogicalDriveStrings获取卷标
#include <windows.h> #include <stdio.h> #define BUFSIZE 512 int main() { TCHAR szTemp[BU ...
- CAD参数绘制mcdbsolid对象(com接口)
C#中实现代码说明: private void DrawSolid() { //绘McDbSolid对象 axMxDrawX1.AddLinetype("MLineType1", ...
- [WDS] Warnings while compiling. vue项目运行控制台输出太多警告信息
vue项目运行控制台输出太多警告信息,我们需要vue 忽略警告,如Expected indentation of 0 spaces but found 2 这种警告都提示,很影响视觉体验! 解 ...
- 【原】tcpdump命令
1.常用参数总结 tcpdump tcpdump -i (网卡) tcpdump -nn (数字的方式显示IP和端口.一个n是ip) tcpdump -c x (抓包数量,x为数字) tcpd ...
- Delphi最简化异步选择TCP服务器
网上Delphi的Socket服务器优良代码,实在少见,索性写个简化的异步Socket服务器,虽然代码较少,但却该有的都有了,使用的是异步选择WSAAsyncSelect,减少了编写线程的繁琐.可能会 ...
- 色码表 Color code table
最近打算更新设计博客页面,需要用到CSS色码表,查了一些资料现转载此处以备以后使用,点击此处查看原文,另外还发现了几个不错的网站: color-hex HTML颜色代码 色碼表 色碼表英文為 Colo ...
- IDEA下Eclipse快捷键
- centos7安装kvm虚拟机
一 centos7安装kvm虚拟机 1.验证CPU是否支持KVM 结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的. [root@centos ~]# egrep '(vmx| ...
- 树莓派 - wiringPi
wiringPi其实和BCM2835 library类似,也是通过memmap, IOmap来实现在用户空间直接操作底层寄存器 wiringPi http://wiringpi.com/ Wiring ...