程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 2578 Dating with girls(1)

HDU 2578 Dating with girls(1)

編輯:C++入門知識

HDU 2578 Dating with girls(1)


2都做了,把1補上。

題意給出n和k,還有n個數。就是n個數中 找出兩個數x,y。使得 x+y=k。

計算所有的可能。當x0+y0=k。x1+y1=k 。 必須有不相等的。 x0!=x1 or y0!=y1。

例如

4 4

2 2 2 2

正確輸出應該是 1 。

 

我是排序,去重,然後二分。貌似很多人都是用 two pointers。

忘了stl的二分返回下標的函數了,心情不好,懶得去查,手打二分。

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define PI 3.141592654
#define CLR(a,b) memset(a,b,sizeof(a))
#define FOR(i,a,b) for(int i=a;i=b;i--)
#define sf scanf
#define pf printf
#define all(v) (v).begin(),(v).end()
#define acfun std::ios::sync_with_stdio(false)

#define SIZE (100000 +2)
#define MOD 1000000007
using namespace std;

int binsearch(int *a,int l,int r,int key)
{
    while(l<=r)
    {
        int m=(l+r)>>1;
        if(a[m]==key)
            return m;
        else if(a[m]>key)
            r=m-1;
        else
            l=m+1;
    }
    return -1;
}
int main()
{
    int t;
    sf("%d",&t);
    while(t--)
    {
        int n,m;
        sf("%d%d",&n,&m);
        int a[SIZE];
        FOR(i,0,n)
            sf("%d",&a[i]);
        sort(a,a+n);
        int cnt =unique(a,a+n)-a;
        int ans=0;
        FOR(i,0,cnt)
        {
            if(a[i]<=m&&binsearch(a,0,cnt-1,m-a[i])!=-1)
                ans++;
        }
        pf("%d\n",ans);
    }
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved