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;
}
本文提供了一种解决UVA-11136编程问题的方法,通过使用deque和priority_queue两种数据结构实现高效求解,具体介绍了每种方法的实现细节。

1328

被折叠的 条评论
为什么被折叠?



