https://vjudge.net/problem/UVA-11136
1.关闭同步
2.使用long long!!!
3.deque的sort必须用begin()和end()
deque做法:
#include<iostream>
#include<algorithm>
#include<deque>
using namespace std;
deque<int>a;
int main(){
ios::sync_with_stdio(false);
int d;
while((cin>>d)&&d!=0){
a.clear();
long long sum=0,len=0;
while(d--){
int n;
cin>>n;
len+=n;
for(int i=0;i<n;i++){
int m;
cin>>m;
a.push_back(m);
}
if(n!=0)
sort(a.begin(),a.end());
sum+=(a.back()-a.front());
a.pop_front();
a.pop_back();
len-=2;
}
cout<<sum<<endl;
}
return 0;
}
priority_queue做法:
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int unuse[1000005]; /// 记录没用过的票数
int main(){
int n, m, k, Min, Max;
while ((cin>>n)&&n){
memset(unuse, 0, sizeof unuse);
priority_queue<int, vector<int>, greater<int> >qmin;
priority_queue<int>qmax;
long long ans = 0;
while (n--){
cin>>k;
while (k--){
cin>>m;
++unuse[m];
qmin.push(m), qmax.push(m);
}
while (unuse[qmin.top()] == 0) qmin.pop();
Min = qmin.top();
--unuse[Min];
while (unuse[qmax.top()] == 0) qmax.pop();
Max = qmax.top();
--unuse[Max];
ans += (long long)(Max - Min);
qmin.pop(), qmax.pop();
}
cout<<ans<<endl;
}
return 0;
}