仍然是二分,hash其实要简单多了,但关键是不熟啊~
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<memory.h>
#include<algorithm>
using namespace std;
const int MAX_N = 100001;
int N,P;
int M;
int f[MAX_N];
int init()
{
int i;
scanf("%d %d",&N,&P);
for (i=1;i<=N;i++)
scanf("%d",&f[i]);
}
int work()
{
sort(f+1,f+N+1);
M=N;
int i,j,k,mid;
int v;
for (i=1;i<=N;i++)
if (f[i])
{
v=f[i]*P;
j=i,k=N;
while (j<=k)
{
mid=(j+k)/2;
if (f[mid]==v)
break;
if (f[mid]<v)
j=mid+1;
else
k=mid-1;
}
if (j<=k) M--,f[mid]=0;
}
}
int put()
{
printf("%d",M);
}
int main()
{
init();
work();
put();
return 0;
}