poj3258 哈夫曼树 优先队列
2015-08-22 20:45
375 查看
River Hopscotch
Description
Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully jumping from rock to rock in a river. The excitement takes place on a long, straight river with a rock at the start and another rock at the end, L units
away from the start (1 ≤ L ≤ 1,000,000,000). Along the river between the starting and ending rocks, N (0 ≤ N ≤ 50,000) more rocks appear, each at an integral
distanceDi from the start (0 < Di < L).
To play the game, each cow in turn starts at the starting rock and tries to reach the finish at the ending rock, jumping only from rock to rock. Of course, less agile cows never make it to the final rock, ending up instead in the river.
Farmer John is proud of his cows and watches this event each year. But as time goes by, he tires of watching the timid cows of the other farmers limp across the short distances between rocks placed too closely together. He plans to remove several rocks in
order to increase the shortest distance a cow will have to jump to reach the end. He knows he cannot remove the starting and ending rocks, but he calculates that he has enough resources to remove up to M rocks (0 ≤ M ≤ N).
FJ wants to know exactly how much he can increase the shortest distance *before* he starts removing the rocks. Help Farmer John determine the greatest possible shortest distance a cow has to jump after removing the optimal
set of M rocks.
Input
Line 1: Three space-separated integers: L, N, and M
Lines 2..N+1: Each line contains a single integer indicating how far some rock is away from the starting rock. No two rocks share the same position.
Output
Line 1: A single integer that is the maximum of the shortest distance a cow has to jump after removing M rocks
Sample Input
Sample Output
Hint
Before removing any rocks, the shortest jump was a jump of 2 from 0 (the start) to 2. After removing the rocks at 2 and 14, the shortest required jump is a jump of 4 (from 17 to 21 or from 21 to 25).
Source
USACO 2006 December Silver
快排加插入模拟优先队列
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 9252 | Accepted: 3991 |
Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully jumping from rock to rock in a river. The excitement takes place on a long, straight river with a rock at the start and another rock at the end, L units
away from the start (1 ≤ L ≤ 1,000,000,000). Along the river between the starting and ending rocks, N (0 ≤ N ≤ 50,000) more rocks appear, each at an integral
distanceDi from the start (0 < Di < L).
To play the game, each cow in turn starts at the starting rock and tries to reach the finish at the ending rock, jumping only from rock to rock. Of course, less agile cows never make it to the final rock, ending up instead in the river.
Farmer John is proud of his cows and watches this event each year. But as time goes by, he tires of watching the timid cows of the other farmers limp across the short distances between rocks placed too closely together. He plans to remove several rocks in
order to increase the shortest distance a cow will have to jump to reach the end. He knows he cannot remove the starting and ending rocks, but he calculates that he has enough resources to remove up to M rocks (0 ≤ M ≤ N).
FJ wants to know exactly how much he can increase the shortest distance *before* he starts removing the rocks. Help Farmer John determine the greatest possible shortest distance a cow has to jump after removing the optimal
set of M rocks.
Input
Line 1: Three space-separated integers: L, N, and M
Lines 2..N+1: Each line contains a single integer indicating how far some rock is away from the starting rock. No two rocks share the same position.
Output
Line 1: A single integer that is the maximum of the shortest distance a cow has to jump after removing M rocks
Sample Input
25 5 2 2 14 11 21 17
Sample Output
4
Hint
Before removing any rocks, the shortest jump was a jump of 2 from 0 (the start) to 2. After removing the rocks at 2 and 14, the shortest required jump is a jump of 4 (from 17 to 21 or from 21 to 25).
Source
USACO 2006 December Silver
#include<iostream> #include<algorithm> #include<queue> #include<cstdio> using namespace std; priority_queue<int ,vector<int>,greater<int> >x;//从小到大 int t; int main() { int n; while(cin>>n) { for(int i=0;i<n;i++) { cin>>t; x.push(t); } long long int sum=0; while(!x.empty()) { int a=x.top(); x.pop(); if(!x.empty()) { int b=x.top(); x.pop(); sum+=(a+b); x.push(a+b); } } printf("%I64d\n",sum); //64位 } }
快排加插入模拟优先队列
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int a[20020],n; int Insort(int A,int low) { int flag=1; if(low+1>=n) a[low+1]=A; else { for(int i=low+1; i<n; i++) { if(A<a[i]) { for(int j=low+1; j<i; j++) //j<i; { a[j-1]=a[j]; } a[i-1]=A; //i-1赋值 flag=0; break; } } if(flag) { for(int j=low+1; j<n; j++) { a[j-1]=a[j]; } a[n-1]=A; } } } int main() { while(cin>>n) { memset(a,0,sizeof(a)); for(int i=0; i<n; i++) { cin>>a[i]; } sort(a,a+n); long long sum=0; for(int i=0; i<n; i++) { int A=a[i]; if(i+1<n) { int B=a[i+1]; sum+=(A+B); Insort(A+B,i+1); } } printf("%I64d\n",sum); } }
相关文章推荐
- android studio 快捷键
- XMPP的android下的登陆,注册等:
- 一个人如何完成一整个网站的开发(推荐好文,看完绝对让你回味无穷)
- objc的单例模式(ARC环境下)
- 文章标题
- 自适应网页设计
- c++与Tcl通过管道通信,并传递参数,获取测试仪实时测试进度
- USBDM BDM Interface for Freescale Microcontroller -- Hardware
- 存储过程新方法萌芽 *——*
- hdoj1754 I Hate It【线段树区间最大值维护+单点更新】
- sqlite3使用示例
- Git服务器搭建+上传代码
- poj1611 并查集 找感染者
- ssoj2386数字8
- 13 Roman to Integer
- c++/tcl编程总结
- Java生成CSV文件
- Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程
- hdu 5294 Tricks Device
- 【LeetCode】263. Ugly Number