爱思创 150125 集合 题解

150125 集合
一道练习集合的题目, 可以使用 \(STL\) 中的 \(set\) 模拟
具体解法见程序注释

#include<iostream>
#include<set>
#include<algorithm>//sort() 需要 <algorithm>
using namespace std;
set<long long> s;//存答案
long long a[100005];//存输入
int main()
{
    int n, k;
    cin >> n >> k;//定义n, k并输入
    for(int i = 1; i <= n; i ++)
    {
        cin >> a[i];//输入数据
    }
    sort(a + 1, a + n + 1);//要做除法,先插入小的,从小往大排序
    for(int i = 1; i <= n; i ++)
    {
        if(a[i] % k == 0)//如果此数据除以k为整数,则说明a[i]/k可能在数据里
        {
            if(!s.count(a[i] / k))//如果没有出现就插入
            {
                s.insert(a[i]);
            }
        }
        else//不是整数直接插入
        {
            s.insert(a[i]);
        }
    }
    cout << s.size();//输出满足要求的数据个数
    return 0;
}

三年 OI 一场空,不开 long long 见祖宗

不开 long long 36分
posted @ 2022-09-03 17:41  yuzihang  阅读(78)  评论(0)    收藏  举报