有這樣的一個集合,集合中的元素個數由給定的N決定,集合的元素爲N個不同的正整數,一旦集合中的兩個數x,y滿足y = P*x,那麼就認爲x,y這兩個數是互斥的,現在想知道給定的一個集合的最大子集滿足兩兩之間不互斥。
輸入有多組數據,每組第一行給定兩個數N和P(1<=N<=10^5, 1<=P<=10^9)。接下來一行包含N個不同正整數ai(1<=ai<=10^9)。
輸出一行表示最大的滿足要求的子集的元素個數。
4 2
1 2 3 4
3
下面附上代碼:
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
int a[100001];
map<int,bool>b;
int main()
{
int ans=0, n, m;
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++)
{
scanf("%d", a+i);
}
sort(a+1,a+n+1);
for(int i=1; i<=n; i++)
{
if(!b[a[i]])
{
ans++;
b[a[i]*m]=1;
}
}
printf("%d\n", ans);
return 0;
}