Dating with girls

用二分查找。。

#include <stdio.h>
#include
<stdlib.h>
#include
<algorithm>
#include
<string.h>
#include
<istream>
using namespace std;

int A[100010],visit[100010];

//二分
int find(int l, int r, int v)
{
int mid;
while (l <= r)
{
//printf("****");
mid = (l + r) / 2;
if( A[mid] == v)
return mid;
else if ( v < A[mid])
r
= mid - 1;
else
l
= mid + 1;

}
return 0;
}

int main( )
{
int T, M, N, num, i, j=0, k, flag = 0;
scanf(
"%d", &T);
while (T--) {
num
= 0;
flag
= 0;
j
= 0;
memset(visit,
0, sizeof(visit));
memset(visit,
0, sizeof(A));
scanf(
"%d%d", &M, &N);
for (i = 0; i < M; i++)
scanf(
"%d", &A[i]);
sort(A, A
+M);
M
= unique(&A[0],&A[0]+M) - &A[0]; //stl
for(i = 0; i < M; i++) {
if(!visit[i] && A[i] * 2 != N)
j
=find(i, M, N-A[i]);
//printf("%d\n",j);
if(j) {
visit[j]
= 1, num++;
/* 如果用此for循环,则TLE
for (k = i; k < M; k++)
if(A[k] == A[i] || A[j] == A[k] )
visit[k] = 1;
else if ( A[k] > A[j] )
break;
*/
}

if(A[i] * 2 == N)
flag
= 1;
j
=0;
}
num
= 2 * num;
if (flag) num++;
printf(
"%d\n", num);
}
return 0;
}



  

posted on 2011-07-20 11:30  more think, more gains  阅读(221)  评论(0编辑  收藏  举报

导航