首页 > 其他 > 详细

HDU 5265 pog loves szh II (找两数之和)

时间:2015-06-12 20:53:58      阅读:240      评论:0      收藏:0      [点我收藏+]

 

题意:给一个数字序列,要求再其中找到两个数,其和再模p的结果是最大的,求此和。

思路:先将输入的元素模p,排序。结果可能有两种情况:

(1)a+b大于p:肯定由两个最大的数之和来产生。

(2)a+b小于p:设b为最大且a+b小于p,那么结果在这两个数的位置之间产生。用两个指针找出来,再与(1)中的ans比较,谁大就取谁。

若有a+b=p-1肯定是答案。

 

技术分享
 1 #include <bits/stdc++.h>
 2 #define LL long long
 3 using namespace std;
 4 const int N=100005;
 5 int n;
 6 LL a[N], p;
 7 
 8 int main()
 9 {
10    // freopen("e://input.txt", "r", stdin);
11     while(~scanf("%d %lld",&n,&p))
12     {
13         for(int i=0; i<n; i++)
14         {
15             scanf("%d",&a[i]);
16             a[i]%=p;
17         }
18         sort(a,a+n);
19 
20         int q1=0, q2=n-1;
21         LL tmp, ans=(a[q2]+a[q2-1])%p;
22 
23         while(q1<q2)
24         {
25             tmp=a[q1]+a[q2];
26             if( tmp>=p )     q2--;
27             else
28             {
29                 if(tmp>ans)    ans=tmp;
30                 q1++;
31             }
32         }
33         printf("%lld\n",ans);
34     }
35     return 0;
36 }
AC代码

 

HDU 5265 pog loves szh II (找两数之和)

原文:http://www.cnblogs.com/xcw0754/p/4572458.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!