HDU 2578 Dating with girls(1)

2015-07-20 17:07:56 · 作者: · 浏览: 5

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); } } 
               
              
             
            
           
          
         
        
      
     
    
   
  


?