题目描述
题解
排序,然后互斥的数组成了一些不相交的链
用map记录一下找链就行了
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
#define LL long long
#define N 100005
int n,cnt,now,ans;
LL p,a[N];
map <LL,int> mp;
bool flag[N];
int main()
{
scanf("%d%lld",&n,&p);
for (int i=1;i<=n;++i) scanf("%lld",&a[i]);
sort(a+1,a+n+1);
for (int i=1;i<=n;++i) mp[a[i]]=i;
for (int i=1;i<=n;++i)
if (!flag[i])
{
cnt=1;now=i;flag[i]=1;
while (mp[a[now]*p])
{
++cnt;
now=mp[a[now]*p];
flag[now]=1;
}
ans+=(cnt-1)/2+1;
}
printf("%d\n",ans);
}