首页 > 编程语言 >南沙C++信奥老师解一本通题:1372:小明的账单

南沙C++信奥老师解一本通题:1372:小明的账单

时间:2024-09-22 10:12:30浏览次数:1  
标签:Node 小明 信奥 账单 int money 1372 通题 id

 【题目描述】

小明在一次聚会中,不慎遗失了自己的钱包,在接下来的日子,面对小明的将是一系列的补卡手续和堆积的账单… 在小明的百般恳求下,老板最终同意延缓账单的支付时间。可老板又提出,必须从目前还没有支付的所有账单中选出面额最大和最小的两张,并把他们付清。还没有支付的账单会被保留到下一天。 请你帮他计算出支付的顺序。

【输入】

第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

 

#include <bits/stdc++.h>
using namespace std;
struct Node {
    int id;
    int money;
};
bool v[1500001];// 标志是否支付 
struct cmpsmall//小顶堆比较仿函数 
{
	bool operator () (Node a, Node b)
	{
		return a.money > b.money;
	}
};
struct cmpbig//大顶堆比较仿函数 
{
	bool operator () (Node a, Node b)
	{
		return a.money < b.money;
	}
}; 
int main()
{
	priority_queue<Node, vector<Node>, cmpsmall> pqmin;//小顶堆
	priority_queue<Node, vector<Node>, cmpbig> pqmax;//大顶堆
	int n,num,id=0,bill;//账单 
	cin>>n;
	while(n--)
	{
		cin>>num;
		for(int i=1;i<=num;i++)
		{
			cin>>bill;
			id++;
			Node node1={id,bill};
			Node node2={id,bill};
			pqmin.push(node1);		
			pqmax.push(node2);		
		}
		while( v[pqmin.top().id ]==true)	
			pqmin.pop();
		cout<< pqmin.top().money <<" ";
		v[  pqmin.top().id ]=true;
		pqmin.pop();
		
		while( v[pqmax.top().id ]==true)	
			pqmax.pop();
		cout<< pqmax.top().money <<endl;
		v[  pqmax.top().id ]=true;
		pqmax.pop();
		
	}
	return 0;
}

 

标签:Node,小明,信奥,账单,int,money,1372,通题,id
From: https://www.cnblogs.com/nanshaquxinaosai/p/18424984

相关文章