zoukankan      html  css  js  c++  java
  • 小明的账单

    题目描述:

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

    输入:

    第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

    这是一道典型的用STL模板的题,其实用set或multi set都还好啦(甚至还有用queue或者stack的),现下代码,然后解释解释emmm:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<set>
    using namespace std;
    multiset <int> q;
    long long n;
    long long m,a[100];
    int r,t;
    int main()
    {
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%lld",&a[i]);
            q.insert(a[i]);
        }   
        r=*q.begin();
        t=*(--q.end());
        printf("%d %d
    ",r,t);
        q.erase(q.begin());
        q.erase((--q.end()));
    }
    return 0;
    } 

    不开longlong见祖宗……
    这里我用的是multi set啊!主要是利用它能erase一个数,这个还是很方便的;这里要注意r=*q.begin(),其实会想问:哎呀,中间的“ * ”啥意思啊。因为这里的begin或者end操作是取地址的(包括迭代器),所以要使r和t有实际意义的值,就必须加个取值符( * ),切记切记啊。
    另外set和multi set的区间都是左闭右开,所以t=*(--q.end())和q.erase((--q.end()))要把它-1操作,目的是取到它整个数列的最后一位。、

    set&&multiset(集合)
    这俩有啥区别呢:
    set是存入的元素是不能重复的,
    multiset是存入的元素是可以重复的。
    是不是感觉这两个板特别有用啊,再给几个操作吧:

    set <int> s;
    s.insert();
    s.erase();
    s.size();
    s.empty();

    所以set和multiset是很牛逼的,好好学吧!!!

  • 相关阅读:
    Python核心技术与实战——十四|Python中装饰器的使用
    Python核心技术与实战——十三|Python中参数传递机制
    GUI学习之三十四——QSS样式表
    数据分析思维(一):数据分析的三种核心思维
    python设计模式
    Docker架构
    云技术
    5G[generation]的知识收集
    计算机网络知识汇总---20191207
    odoo里面的read_group写法
  • 原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8075523.html
Copyright © 2011-2022 走看看