题意:超市搞促销,每天都从箱子里拿出最大和最小的差作为促销金额,给出n天的促销情况,问最后总的促销金额。
思路:set构造,当有小票的时候放入set,每天结束的时候取出头和尾即可。
code:
#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int N=1e5+5;ll ans;
multiset<int>s;
multiset<int>::iterator np,mp;
int main()
{int n,k,v;while (~scanf("%d",&n)&&n){ans=0;s.clear();for (int i=0;i<n;i++){scanf("%d",&k);for (int j=0;j<k;j++) scanf("%d",&v),s.insert(v);np=s.begin(),mp=(s.end());mp--;ans+=*mp-*np;s.erase(mp); s.erase(np);}cout<<ans<<endl;}
}