在我的博客食用效果更佳!https://www.cbw2007.tk/articles/luogu-P1138-sol/,文章最初發表於2019年5月22日。更多見在不同的網站瀏覽本站內容
STL大法吼啊!
分析
這道題有兩個步驟:排序、去重。
解決這個問題的方法有很多:sort+遍歷去重、unique、其他高端數據結構等。我本來想選第一種方法的,後來我突然想起有一種STL可以自動去重+排序,那就是set,那豈不是很簡單?(美滋滋)結果更難了
SET用法解析
需要包含的頭文件:
#include<set>
它的定義方法:
set<type> name;
//例子:定義int型,取名爲a
set<int> a;
我們要用到的函數:
iterator begin(); //指向第一個元素的迭代器
iterator end(); //指向最後一個元素的迭代器
pair insert(const type &val); //在集合中插入val元素,並返回指向該元素的迭代器和一個布爾值來說明val是否成功的被插入了
size_type size(); //返回元素數目
遍歷方法:
int cnt=0;//用於記錄遍歷到第幾個了
for (set<int>::iterator i=a.begin();i!=a.end();i++)
{
cnt++;
if (cnt==k)//達到終點
cout<<*i;
}
更多STL工具見文末!
應用在此題中
首先,我們可以使用insert
函數用來插入元素。然後使用size來判斷元素夠不夠 k 個,最後按照上文的方法進行遍歷即可!
本文代碼:
#include<iostream>
#include<set>
using namespace std;
set<int> a;//定義集合
int main()
{
int n,k;
cin>>n>>k;
for (int i=1;i<=n;i++)
{
int x;
cin>>x;
a.insert(x);//插入元素
}
if (a.size()>=k)//判斷元素數量是否足夠
{
int cnt=0;//標記遍歷到了第幾個
for (set<int>::iterator i=a.begin();i!=a.end();i++)//遍歷
{
cnt++;
if (cnt==k)//到達目的地
cout<<*i;//輸出
}
}
else
cout<<"NO RESULT";//輸出無解
return 0;//完結撒花ヽ(≧∀≦)ノ
}