【题目描述】
小明在一次聚会中,不慎遗失了自己的钱包,在接下来的日子,面对小明的将是一系列的补卡手续和堆积的账单… 在小明的百般恳求下,老板最终同意延缓账单的支付时间。可老板又提出,必须从目前还没有支付的所有账单中选出面额最大和最小的两张,并把他们付清。还没有支付的账单会被保留到下一天。 请你帮他计算出支付的顺序。
【输入】
第1行:一个正整数N(N≤15,000),表示小明补办银联卡总共的天数。
第2行到第N+1 行:每一行描述一天中收到的帐单。先是一个非负整数M≤100,表示当天收到的账单数,后跟M个正整数(都小于1,000,000,000),表示每张帐单的面额。
输入数据保证每天都可以支付两张帐单。
【输出】
输出共N 行,每行两个用空格分隔的整数,分别表示当天支付的面额最小和最大的支票的面额。
【输入样例】
4
3 3 6 5
2 8 2
3 7 1 7
0【输出样例】
3 6
2 8
1 7
5 7
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<vector>
#include<set>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 10001
#define MOD 123
#define E 1e-6
using namespace std;
multiset<int> st;//定义int类型的set
int main()
{
int n;
cin>>n;
st.clear();
for(int i=1;i<=n;i++)
{
int m;
cin>>m;
for(int j=1;j<=m;j++)
{
int a;
cin>>a;
st.insert(a);//插入元素
}
cout<<*st.begin()<<" ";//输出最小元素
st.erase(st.begin());//删除set中最小元素
cout<<*(--st.end())<<endl;//输出最大元素
st.erase(--st.end());//删除set中最大元素
}
return 0;
}
信息学奥赛一本通T1372:堆及其应用 小明的账单 归属于 堆及其应用,更多同类题解源程序见:堆及其应用 和 小明的账单
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!