一个很水的题,主要熟悉下STL中set的用法,set中元素不可重复,multisel中元素可重复,s.end()指向的是最后一个元素的下一个位置,这题还可以用优先队列解,就不写了。
#include<cstdio> #include<set> using namespace std; multiset<int>s; int main() { int n; while(~scanf("%d",&n)&&n) { int i,j,k,t; long long ans=0; s.clear(); for(i=0;i<n;i++) { scanf("%d",&k); for(j=0;j<k;j++) { scanf("%d",&t); s.insert(t); } multiset<int>::iterator minn=s.begin(),maxn=s.end(); maxn--; ans+=(*maxn-*minn); s.erase(maxn),s.erase(minn); } printf("%lld\n",ans); } }