欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

2011年吉林大学计算机研究生机试真题

发布时间:2024/7/19 89 豆豆
生活随笔 收集整理的这篇文章主要介绍了 2011年吉林大学计算机研究生机试真题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

http://ac.jobdu.com/problem.php?pid=1107     搬水果

方法一:(优先队列)

#include<iostream> #include<queue> #include<vector> using namespace std; #include<stdio.h>int main(void) {int i,n,m,a,b,sum;//使用优先队列priority_queue<int,vector<int>,greater<int> >q; //从小到大排序while(scanf("%d",&n),n){while(!q.empty())q.pop();for(i=0;i<n;i++){scanf("%d",&m);q.push(m);}sum=0;while(q.size()>2){a=q.top();q.pop();b=q.top();q.pop();a+=b;sum+=a;q.push(a);}if(q.size()==2){a=q.top();q.pop();b=q.top();q.pop();sum=sum+a+b;printf("%d\n",sum);}else if(q.size()==1){printf("%d\n",q.top());q.pop();}}return 0; }

方法二:

//multiset,默认是升序排列的 #include<iostream> #include<set> #include<cstdio> using namespace std;multiset<int> s; //可以在multiset容器中放入相同的元素inline bool scan_d(int &num) // 这个就是 加速的 关键了 {char in;bool IsN=false;in=getchar();if(in==EOF)return false;while(in!='-'&&(in<'0'||in>'9')) in=getchar();if(in=='-') { IsN=true;num=0;}else num=in-'0';while(in=getchar(),in>='0'&&in<='9'){num*=10,num+=in-'0';}if(IsN)num=-num;return true; }int main(void) {int i,n,sum,x,a;while(scanf("%d",&n)!=EOF){if(!n)break;s.clear();sum = 0;for(i = 0 ; i < n ; ++i){scan_d(x);s.insert(x);}if(s.size() == 1)sum += (*s.begin());while(s.size()>1){a = (*s.begin());s.erase(s.begin());a += (*s.begin());s.erase(s.begin());sum += a;if(!s.empty())s.insert(a);}printf("%d\n",sum);}return 0; }

 

总结

以上是生活随笔为你收集整理的2011年吉林大学计算机研究生机试真题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。