问题 A: [排序] 一次查找两元素
时间限制: 1 Sec 内存限制: 64 MB
提交: 30 解决: 21
[提交] [状态] [讨论版] [命题人:]
题目描述
修罗王和邪狼逃出监狱, 混入了监狱门口检查站前排成一列准备待检的囚犯人群中, 由于每个囚犯入狱前均以编号来表示, 且该编号的编写规则是囚犯的危险性越大, 则编号就越小. 显然, 修罗王和邪狼因其极端的危险性, 其编号必定是这一列无序排列的人群中最小的两个, 那么, 如何对所有人的编号只用一遍扫描, 即找出修罗王和邪狼的编号呢?
输入
共两行, 第一行为一个数N(N1000000), 即排队的人数, 第二行为N个数, 即每个人的编号, 每个编号均不超过 int 类型的最大值.
输出
输出由小到大排列的最小的两个编号.
样例输入
- 10
- 2 1 76 11 4 765 32 56 3 23
样例输出
1 2 分析: 排序, 输出前两个元素.
- #include <iostream>
- #include <string>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- #include <vector>
- #include <queue>
- #include <deque>
- #include <map>
- #define range(i,a,b) for(int i=a;i<=b;++i)
- #define LL long long
- #define rerange(i,a,b) for(int i=a;i>=b;--i)
- #define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
- using namespace std;
- int n;
- vector<int>num;
- void init(){
- cin>>n;
- num.resize(n+1);
- range(i,1,n)cin>>num[i];
- sort(num.begin()+1,num.end());
- }
- void solve(){
- cout<<num[1]<<" "<<num[2]<<endl;
- }
- int main() {
- init();
- solve();
- return 0;
- }
- View Code
来源: http://www.bubuko.com/infodetail-2694908.html