hdu 5265 pog loves szh II

原创 2015年07月07日 23:09:17

pog loves szh II

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2011    Accepted Submission(s): 576


Problem Description
Pog and Szh are playing games.There is a sequence with n numbers, Pog will choose a number A from the sequence. Szh will choose an another number named B from the rest in the sequence. Then the score will be (A+B) mod p.They hope to get the largest score.And what is the largest score?
 

Input
Several groups of data (no more than 5 groups,n1000).

For each case: 

The following line contains two integers,n(2n100000)p(1p2311)

The following line contains n integers ai(0ai2311)
 

Output
For each case,output an integer means the largest score.
 

Sample Input
4 4 1 2 3 0 4 4 0 0 2 2
 

Sample Output
3 2
 
      
     简单说一下本题题意:给你两个数  n,p,然后在给你 n 个数,让你在其中找到两个数 a ,b,使得(a+b)%p 达到最大

    这是杭电BC上面的一道题,有个公式是 (a+b)modc==(a mod c+b mod c ) mod  c   
  
   
     
    根据这个公式,问题便能解决了, 先把所有的数都对p取模,然后再对p取模,再排序,之后再从两端向中间找,找到最大的两个数。注意范围,两个int 有可能超int。


    代码如下:

    
#include<iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
#define  LL __int64 //与long long 型一样,格式控制是%I64d
int main()
{
    LL  a[100008];
    LL  n,p;
    while(~scanf("%I64d%I64d",&n,&p))
    {
        for(LL i=0; i<n; i++)
        {
            scanf("%I64d",&a[i]);
            if(a[i]>=p)
                a[i]=a[i]%p;
        }
        sort(a,a+n);
        LL left=0,right=n-1;
        //此处求得的数是大于p时的最大的解
        LL max1=(a[n-1]+a[n-2])%p;
        //从两边向中间查找
        while(left<right)
        {
            //如果大于p,不管,前面已求出
            if(a[left]+a[right]>=p)
                right--;
            else
            {
                if(a[left]+a[right]>max1)
                    max1=a[left]+a[right];
                left++;
            }
        }
        printf("%I64d\n",max1);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

BestCoder Round #43 HDU5265 pog loves szh II 排序+贪心

pog loves szh II                                                                    Time Limit: 400...

HDU 5265 pog loves szh II (二分查找)

【题目链接】click here~~ 【题目大意】在给定 的数组里选两个数取模p的情况下和最大 【解题思路】: 思路见官方题解吧~~ 弱弱献上代码: /* View Code Problem : 52...

【HDU】5275 pog loves szh IV【拉格朗日插值法】

传送门:【HDU】5275 pog loves szh IV题目分析:首先,队友给了我一个拉格朗日插值法的公式,裸的OWO,如下: ∑i=lr{yi∏i!=j(xi−xj)∏i!=j(x−xj)}\...

hdu 5267 pog loves szh IV(点分治+线段树)

好久之前写的题了。现在要重新开始写题解了。就从这题开始吧。 题意:一棵树,两点之间的权值为路径上的值异或得到,求任意两点之间的权值和,有修改操作,每次都要输出任意两点间的权值和。 做法:当时写这题写了...

HDU 5266 pog loves szh III (线段树+在线LCA转RMQ)

题目地址:HDU 5266 这题用转RMQ求LCA的方法来做的非常简单,只需要找到l-r区间内的dfs序最大的和最小的就可以,那么用线段树或者RMQ维护一下区间最值就可以了。然后就是找dfs序最大的...

hdu 5266 pog loves szh III LCA+RMQ

题意: 给你一棵树,然后询问l~r节点的最近公共祖先(LCA)。 思路: 用RMQ维护一段区间的LCA,然后询问时,将两个区间的LCA再求一次LCA即可。 code: #pragma com...

【HDU】5267 pog loves szh IV【动态点分治】

传送门:【HDU】5267 pog loves szh IV 题目分析:首先我们用树分治,对每一个分治重心,以此为根的子树,建立一棵线段树。可以发现总节点数只有$O(NlogN)$,因为每一层都...

hdu 5266 pog loves szh III(LCA)

题意:求编号l-r的lca。 做法:第一种方法是维护一个类似rmq的东西,因为abcd的lca,可以由ab的lca和cd的lca的lca得到,然后重叠也没有关系,就比如刚才的例子,abcd的lca也...

二指针_____NanoApe Loves Sequence II(hdu 5806 BestCoder Round #86)

问题描述 退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列。他在纸上随便写了一个长度为 nn 的数列,他又根据心情写下了一个数 mm。 他想知道这个数列中...

hdu 5270 ZYB loves Xor II

题目链接 此类数论题大多按位考虑,显然暴力会超时。 不妨对(a+b)的第i位做考虑,将a,b都模2^(i+1),显然在(a+b)∈[2^i,2^(i+1))∪[3*2^i,2^(i+2))时该位为...
  • zpltys
  • zpltys
  • 2015年06月30日 05:06
  • 314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 5265 pog loves szh II
举报原因:
原因补充:

(最多只允许输入30个字)