CODEVS 1553 互斥的数

    xiaoxiao2021-03-25  176

    题目描述 Description

    有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知道给定的一个集合的最大子集满足两两之间不互斥。

    输入描述 Input Description

    输入有多组数据,每组第一行给定两个数N和P(1<=N<=10^5, 1<=P<=10^9)。接下来一行包含N个不同正整数ai(1<=ai<=10^9)。

    输出描述 Output Description

    输出一行表示最大的满足要求的子集的元素个数。

    样例输入 Sample Input

    4 2 1 2 3 4

    样例输出 Sample Output

    3

    分析

    为什么不用平衡树来判断而要打那么多个哈希呢?

    代码

    #include <bits/stdc++.h> #define inf 0x7fffffff using namespace std; set<int>s; int main() { int n,p,x,c = 0; cin>>n>>p; while (n--) { cin>>x; s.insert(x); } while(!s.empty()) { int now = *s.begin(); s.erase(now); int chain = 1; while ((long long)now * p <= inf && s.count(now * p)) { now *= p; s.erase(now); chain++; } c += (chain+1)/2; } cout<<c<<endl; }
    转载请注明原文地址: https://ju.6miu.com/read-11192.html

    最新回复(0)