题意:超市每次从票箱选出最大和最小的账单,将(Max-Min)给Max的人,问n天后超市付出多少钱
思路:要省去排序的容器就有set和multiset,为了储存重复的数字,所以采用multiset
#include <iostream> #include <cstring> #include <set> #include <cstdio> #include <algorithm> using namespace std; int n,t,m; int Min,Max; long long ans; multiset<int> s; int main(){ while (scanf("%d",&n) != EOF && n){ ans = 0; s.clear(); for (int i = 0; i < n; i++){ scanf("%d",&m); for (int j = 0; j < m; j++){ scanf("%d",&t); s.insert(t); } if (s.size() > 0){ multiset<int >::iterator it; it = s.begin(); Min = *it; it = s.end(); it--; Max = *it; s.erase(it); if (s.size() > 0){ it = s.begin(); s.erase(it); } ans += Max - Min; } } printf("%lld\n",ans); } return 0; }
原文:http://blog.csdn.net/u011345136/article/details/19637873