http://acm.hdu.edu.cn/showproblem.php?pid=1678
继续是STL的堆,这道题最小堆最大堆均可,随手写一个就ok。
刚开始题意理解有问题,各种wa,郁闷得要死。
从最小堆来看,三个一组最小的加到答案里。如果元素总数不能被3整除,就先把堆顶元素出堆,直到能被3整除为止。
View Code
#include <iostream> #include <queue> #include <algorithm> using namespace std; int main() { int t,n,p; int ans; priority_queue <int , vector<int>, greater<int> > q; scanf("%d",&t); while(t--) { ans=0; scanf("%d",&n); while(n--) { scanf("%d",&p); q.push(p); } if(q.size()%3!=0) q.pop(); if(q.size()%3!=0) q.pop(); while(!q.empty()) { ans+=q.top(); q.pop(); q.pop(); q.pop(); } printf("%d\n",ans); } return 0; }