注意:因为账单金额有可能重复,所以需要使用multiset,另外结果会爆int
#include <stdio.h> #include <iostream> #include <stack> #include <string> #include <set> #include <memory.h> using namespace std; multiset<int> record; int days , Hash[1000005]; int main() { scanf("%d", &days); long long ans = 0; memset(Hash, 0, sizeof(Hash)); while( days-- ) { int num; scanf("%d", &num); while( num-- ) { int cost; scanf("%d", &cost); Hash[cost]++; record.insert(cost); } multiset<int>::iterator iter = record.end(); iter--; int MaxCost = (*iter); Hash[MaxCost]--; record.erase(iter); iter = record.begin(); int MinCost = (*iter); record.erase(iter); ans += (MaxCost - MinCost); } printf("%lld\n", ans); return 0; }