CODE【VS】1553 互斥的數(hash表+map函數)

題目描述 Description

有這樣的一個集合,集合中的元素個數由給定的N決定,集合的元素爲N個不同的正整數,一旦集合中的兩個數x,y滿足y = P*x,那麼就認爲x,y這兩個數是互斥的,現在想知道給定的一個集合的最大子集滿足兩兩之間不互斥。

輸入描述 Input Description

輸入有多組數據,每組第一行給定兩個數NP1<=N<=10^5, 1<=P<=10^9)。接下來一行包含N個不同正整數ai1<=ai<=10^9)。

輸出描述 Output Description

輸出一行表示最大的滿足要求的子集的元素個數。

樣例輸入 Sample Input

4 2

1 2 3 4

樣例輸出 Sample Output

3

題解:用map函數標記一下,從頭到尾遍歷一遍就行了。

下面附上代碼:

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章