2014年7月19日——比赛题取石头问题1

参考地址:

http://blog.csdn.net/abcjennifer/article/details/5922699

River Hopscotch

Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 2433   Accepted: 1064

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 distance Di 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 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: LN, 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

二分判断每个长度的间隔是否能满足去掉的石头数<=m

试题

参考AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
#define N 50010
int len[N];

int n,m,l;
bool judge(int inv)//interval
{
int seq[N],top=0,num=0;
seq[0]=-1;
for(int i=0;i<n;i++)
{
if(len[i]-seq[top]<inv)
num++;
else
seq[++top]=len[i];
}
if(l-seq[top]<inv)
return false;
if(num>m)
return false;
return true;
}

int main()
{
while(scanf("%d%d%d",&l,&n,&m)!=EOF)
{
int i,j,k;
for(i=0;i<n;i++)
scanf("%d",&len[i]);
sort(len,len+n);
int ans;
int low=0,high=l;
while(low<=high)
{
int mid=(low+high)>>1;
if(judge(mid))
{
low=mid+1;
ans=mid;
}
else
high=mid-1;
}
printf("%d/n",ans);
}
}

自己的看法和总结:

这道题的思想是经常遇见,值得自己以后参考借鉴。

代码思路:

思路:二分答案,判断该答案是否正确。
比如搜索到答案D,可以从头搜索每个点,如果该点与前一个点的距离小于D,则取掉这个点,最后统计去掉了都少个点。如果比m多了,说明D大了,向下二分。否则向上二分。

因此后来就将这个代码看懂了。

#include <iostream>
#include <algorithm>
using namespace std;

int a[50001], n, m, l, mid;

bool check(int mid){
int stack[50001], point = 0, count = 0;
stack[0] = 0;
for (int i = 0; i < n; i++){
if (a[i] - stack[point] < mid) count++;
else stack[++point] = a[i];
}
if (l - stack[point] < mid || count > m) return false;
return true;
}

int main(){
while(cin>>l>>n>>m){
for (int i = 0; i < n; i++) cin>>a[i];
sort(a, a + n);
int l1 = 0, l2 = l;
while (l1 < l2){
mid = (l1 + l2) >> 1;
if (check(mid)) l1 = mid; else l2 = mid - 1;
if (l1 + 1 == l2) l1 = l2;
}
mid = (l1 + l2) >> 1;
if (!check(mid)) l1--;
cout<<l1<<endl;
}
return 0;
}

其实自己的思路一开始并不是使用二分法,而是想通过寻找到最小的那个路径然后将它去掉,然后重新搜索,搜索的次数即为去掉石头的个数,所以思路有点偏。

2014年7月19日——比赛题取石头问题1

时间: 2024-10-17 07:51:15

2014年7月19日——比赛题取石头问题1的相关文章

【每日圣经日历】2014年9月19日

Vendredi le 19 Septembre 2014 礼拜五 2014年9月19日 Mais la parole du Seigneur demeure éternellement. Et cette parole est celle qui vous a été annoncée par l'vangile.                                                                      1 Pierre 1. 25 惟有主的道(

类型--2014年10月19日

// //Console.WriteLine(); // //int s = int.Parse(Console.ReadLine()); // double d = double.Parse(Console.ReadLine()); // //d=Math.Sqrt(d);//平方根,即25时,输出为5,,,输入4,0时输出2 // // d=Math.PI;//圆周率 // //d = Math.Ceiling(d);//取上线.即2.1为3.....1.0为1 // //d = Math.

米的建站日记(2014年12月19日)

今天要做一个pdf在线预览的功能,同事帮我找到了一个FlexPaper的插件, 这位大神有详细的使用教程:http://www.cnblogs.com/qinpeifeng107/archive/2011/08/29/2158879.html 说下我使用过程中遇到的问题,一开始FlexPaperViewer.swf的路径总是不对,报下面这个错 (红色涂掉的地方是项目名称) 有经验的人一看就知道是路径出问题拉,ok,接下来在flexpaper.js里查找 “FlexPaperViewer.swf”

2014年5月28日19:57:44

我感觉自己想流泪,自己内心坚持的就这样被动摇了.我真的有些受不来别人对我的这种坦白,也真的不想有人因我受到伤害.也许应该怪我自己对她太过于坦白.难以忘记的那一节生物课,她将纸条拿在手中时的踌躇,她的挣扎,还有让我内心不忍的样子,我无奈的妥协,平静的为她找了借口. 只不过,人生的这一切都是巧合,一个个的巧合罢了. 那么,我该怎么办呢? 真的不明白,自己今天为什么不说不呢. 呵呵,我为什么会遇上齐菲菲呢.我又为什么这么固执呢?为什么一直想着为她倾尽一切?现在应该知道这一切都是不可能了吧. 或许人生就

翻译:Gregory Larsen,2016/02/19(第一版:2014年12月17日)高级T-SQL阶梯1级:使用CROSS JOIN介绍高级T-SQL

原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/119933/ 原文作者:Gregory Larsen,2016/02/19(第一版:2014年12月17日) 系列 本文是"Stairway Series:Stairway to Advanced T-SQL"的一部分 这个阶梯将包含一系列文章,这些文章将在前面两个T-SQL阶梯,T-SQL DML和T-SQL超越基础知识的T-SQL基础上进行扩展. 这个楼梯应

2014年9月19~20日,杨学明老师《软件测试管理》公开课(杭州站)成功举办!

2014年9月19-20日,<软件测试管理>公开课在杭州成功举办!来自电力电子.LED.软件.仪表.物联网等企业的研发负责人和测试部门经理等参加了此次培训,此次培训由研发资深讲师杨学明主讲,本次课程采用全程案例分析讲解,让学员从一开始就融入到软件测试的场景中去,根据测试中所遇问题进行针对性讲解和讨论:每一个知识点的讲解都有相应的工具和模板支撑,从而使学员所学的知识在工作中能真正使用起来,也解决了培训不能落地的难题: 培训结束后许多企业表示将引进杨老师的内训和咨询服务.

2017年8月14日套题记录 | 普及组

写在前面 今天登洛谷发现离Noip剩下88天了??(虽然看起有点久),然后觉得似乎水了一个暑假什么也没做(虽然学了点数据结构和一些奇奇Gaygay的东西),于是打开题库发现去年Long Happy的集训套题我似乎没有提交过,那就一天一套题,顺便码个题解+心得(雾? T2.传作业 题目描述 某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里.由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学.已知某十三与组长之间有N个他熟悉的同学,并

2014年6月6日22:35:21

sln:使用解决方案文件(后缀为sln的文件)表示一个项目组,他通常包含一个解决方案中所有的项目信息.一个sln文件通常由三部分组成:1. 文件版本.2. 工程信息.3. 全局设置. csproj:它是"C Sharp Project"的缩写...net 开发环境中建立项目时,会产生 .csproj 文件,这是C#的项目文件,其中记录了与项目有关的相关信息,例如包含的文件,程序的版本,所生成的文件的类型和位置的信息等. 1 //换行.看起来是两个,其实\和后面的是一体的 2 char

静态类2014年6月9日10:02:28

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 静态类密闭类 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //A a = new A();//错误,静态类不能new 13 14 //Math m = new Math();//错误,静态类不能