首页 > 其他分享 >5771: 小明的账单 multiset

5771: 小明的账单 multiset

时间:2023-10-13 18:34:41浏览次数:35  
标签:小明 账单 迭代 int 元素 5771 multiset

描述

 

 

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

 

 

输入

 

 

第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

在C++中,std::multiset是一个容器,它存储排序的元素。std::multiset::begin()和std::multiset::end()函数返回的是迭代器,而不是元素本身。迭代器可以被看作是指向容器中元素的指针。

- *st.begin():st.begin()返回一个指向multiset中第一个元素(即最小元素)的迭代器。*操作符用于获取迭代器指向的元素的值,所以*st.begin()表示的是multiset中的最小元素。

- *(--st.end()):st.end()返回一个指向multiset中最后一个元素之后的位置的迭代器,而不是最后一个元素。因此,我们需要使用--操作符将迭代器向前移动一位,使其指向最后一个元素(即最大元素)。然后,我们使用*操作符获取该元素的值。

cout<<*st.begin()<<" ";//输出最小元素
st.erase(st.begin());//删除set中最小元素
cout<<*(--st.end())<<endl;//输出最大元素
st.erase(--st.end());//删除set中最大元素

正确代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3+10,inf = 0x3f3f3f3f;

int main()
{
    multiset<int> s;
    int n;
    cin >> n;
    while(n--)
    {
        int m; cin >> m;
        while(m--)
        {
            int x; cin >> x;
            s.insert(x);
        }
        cout << *s.begin() << " " << *(--s.end()) << endl;
        s.erase(s.begin());
        s.erase(--s.end());
    }
    return 0;
}

 

 

标签:小明,账单,迭代,int,元素,5771,multiset
From: https://www.cnblogs.com/jyssh/p/17762889.html

相关文章

  • 关联容器(map、set、multimap、multiset、pair、unordered_map)
    一、使用关联容器key---value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字;set支持高效的关键字查询操作---检查一个关键字是否在set中。multimap允许多个元素具有相同的关键字。   pair类型用于保存两个数据类型,pair的数据成员是public......
  • 【学习笔记】set & multiset
    PS:本文仅起一个备忘的作用。setset指的是有序的不可重集,与数学上的定义类似。常用操作:p.insert(x):在\(p\)中插入\(x\),若\(p\)中已有\(x\)则返回false,否则返回truep.erase(x):在\(p\)中删除值为\(x\)的元素,返回删除的元素个数p.erase(pos):在\(p\)中删除迭代......
  • STL(13) set multiset
    目录源码VC6中没有identity()那么如何调用呢使用multiset有了红黑树的基础,set和map就变得很简单了源码一步一步的调用rbtree因为set的value就是key所以从value中取出key就用identity就可以而取出迭代器用的是constiterator不允许更改元素set呼叫底层rbtree所以也是一种......
  • Cousleur (ICPC 青岛) (值域主席树 + 逆序对 + multiset +mp)
    题目大意:给一个序列 n会有n次操作,每次都会删除一个数这个数是连续子序列里面最大的逆序对的个数^Q[i],q[i]给出思路:启发式拆分,每次选择长度小的序列来进行处理数学化:rev(逆序对个数)   rev(x+1,r)=rev(l,r)-rev(l,x-1)-(一个元素......
  • 近段时间出现可以用multiset解决的题目
    近段时间出现可以用multiset解决的题目AtCoderBeginnerContest308GMinimumXorPairQuery题意:有一个数组进行\(3\)种操作:加一个数删一个数打印数组\(\min_{1\leqi<j\leqn}{a_i\bigoplusa_j}\)结论:拍序后的数组,其最小异或对在相邻两数中产生那么我......
  • C++容器---关联式容器<set>&<multiset>
    由于multiset和set相差不大,所以基本以set做练习;集合(Set)是一种包含已排序(升序)对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。集合元素既充当数据,又充当关键码,以升序的顺序存储;multiset中的元素可以重复。1)不能直......
  • [Ynoi2010] y-fast trie(multiset+思维)
    题目传送门solution妙妙题。分成\(a+b\geqC\)和\(a+b<C\)讨论。第一类是简单的,只需要选择最大和次大的数就行了。第二类加入是容易的,但是有删除。常规做法是线段树分治+\(multiset\),不能在线。考虑一个性质:如果对于\(x\),小于等于\(C-1-x\)的最大的\(y\)记作\(m......
  • 117.STL中的multiset
    117.STL中的multiset1.multiset的介绍1.multiset是按照特定顺序存储元素的容器,其中元素是可以重复的2.在multiset在,元素的value也会识别它组成的键值对,multiset元素的值不能在容器中进行修改,但可以插入和删除3.在内部,multiset按照特定的严格弱排序准则进行排序4.multiset容......
  • 小明以 hadoop 用户身份在 HDFS 上 hadoop 目录下创建 expl 目录时,发现该目
    使用Hadoop创建目录引言Hadoop是一个开源的分布式计算框架,提供了可靠性和高可扩展性的存储和处理大数据的能力。其中的分布式文件系统HDFS(HadoopDistributedFileSystem)是Hadoop的核心组件之一,用于存储和管理海量数据。在HDFS上进行目录和文件的操作是使用Hadoop命令行工具或者......
  • newcoder61132L <multiset 维护中位数>
    题目中位数多次询问,每次修改数组中一个数,问修改后n个数的中位数思路使用multiset,分别维护数组的较大的\(n/2+1\)个和较小的\(n/2\)个;根据数据范围,或许可用线段树+二分...代码Code#include<iostream>#include<algorithm>#include<vector>#include<cstring>......