题目大意:超市进行促销活动,顾客可以把账单放到一个箱子里,每天超市会从箱子中抽出最高消费者和最低消费者,最高消费者可以得到(最高消费-最低消费)的金钱。询问超市在n天的促销活动结束后应支付多少钱。
找出动态集合的最大值和最小值,可以用multiset进行计算。
1 #include <cstdio> 2 #include <set> 3 using namespace std; 4 5 int main() 6 { 7 #ifdef LOCAL 8 freopen("in", "r", stdin); 9 #endif 10 int n; 11 multiset<int> urn; 12 while (scanf("%d", &n) && n) 13 { 14 urn.clear(); 15 int ans = 0; 16 while (n--) 17 { 18 int k; 19 scanf("%d", &k); 20 int x; 21 for (int i = 0; i < k; i++) 22 { 23 scanf("%d", &x); 24 urn.insert(x); 25 } 26 ans += (*(--urn.end()) - *urn.begin()); 27 urn.erase(urn.begin()); 28 urn.erase(--urn.end()); 29 } 30 printf("%d\n", ans); 31 } 32 return 0; 33 }
提交总是出现Submission error, 算了,先放着吧,以后再试试。