集合是数学中的一个概念,用通俗的话来讲就是:一大堆数在一起就构成了集合。
集合有如下的特性:
无序性:任一个集合中,每个元素的地位都是相同的,元素之间是无序的。
互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
例如 A = { 1 , 2 , 3 } A = \{ 1, 2, 3 \} A={1,2,3} 就是一个集合。我们可以知道, 1 1 1 属于 A A A,即 1 ∈ A 1 \in A 1∈A; 4 4 4 不属于 A A A,即 4 ∉ A 4 \notin A 4∈/A。一个集合的大小,就是其中元素的个数。
现在定义一个特殊的 k k k-集合,要求满足:
给你一个由 n n n 个不同的数组成的集合,请你从这个集合中找出一个最大的 k k k-集合。
第一行:两个整数: n n n 和 k k k。
第二行: n n n 个整数: a i a_i ai 表示给定的集合。
第一行:一个整数: a n s \mathit{ans} ans 表示最大的 k k k-集合的大小。
6 2
2 3 6 5 4 10
3
提示:在样例所给集合中,找出的最大的 2 2 2-集合为 { 4 , 5 , 6 } \{ 4, 5, 6 \} {4,5,6}
我们直接用STL里的set就可以啦~
#include
using namespace std;
long long a[1000000];
set <long long> se;//set
int n,k;
int main()
{
cin>>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||se.find(a[i]/k)==se.end())
{
se.insert(a[i]);//满足条件就插入
}
}
cout<<se.size();//输出集合的大小
return 0;
}
结束啦~