全国信息学奥林匹克联赛(NOIP2015)复赛 提高组 day2答案及解析.pdfVIP

全国信息学奥林匹克联赛(NOIP2015)复赛 提高组 day2答案及解析.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

一、实操题

1、跳石头

【问题描述】

一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道

中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起

点和终点之间,有N

块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步

跳向相邻的岩石,直至到达终点。

为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳

跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走M

块岩石(不能移走起点和终点的岩石)。

【输入格式】

输入文件名为stone.in。

输入文件第一行包含三个整数

L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会

至多移走的岩石数。

接下来N行,每行一个整数,第i行的整数Di(0DiL)表示第i

块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个

岩石出现在同一个位置。

【输出格式】

输出文件名为stone.out。

输出文件只包含一个整数,即最短跳跃距离的最大值。

【输入输出样例1】

【输入输出样例1说明】

将与起点距离为2和14的两个岩石移走后,最短的跳跃距离为

4(从与起点距离17的岩石跳到距离21的岩石,或者从距离21

的岩石跳到终点)。

【数据规模与约定】

对于20%的数据,0≤M≤N≤10。

对于50%的数据,0≤M≤N≤100。

对于100%的数据,0≤M≤N≤50,000,1≤L≤1,000,000,000。

参考答案:对于这个问题,我们可以使用贪心算法来解决。首先,我们需要找到所

有岩石之间的空隙,这些空隙是岩石与岩石之间的距离。然后,我们将这些空隙按

照从小到大的顺序进行排序。接下来,我们从最大的空隙开始,尽量选择填满这些

空隙,直到填满M个空隙或者达到终点。在填充空隙的过程中,我们需要保证每一

步跳跃的距离尽可能大,因此我们应该优先填充较大的空隙。最后,我们返回最大

的跳跃距离。

解析:【喵呜刷题小喵解析】:

这个问题是一个典型的贪心算法问题。贪心算法是一种在每一步选择中都采取当前

情况下最好或者最优(即最有利)的选择,从而希望导致结果是最好或者最优的算

法。在这个问题中,我们需要找到最短跳跃距离的最大值,这可以通过最大化跳跃

距离来实现。

具体来说,我们首先计算出所有岩石之间的空隙,这些空隙是岩石与岩石之间的距

离。然后,我们将这些空隙按照从小到大的顺序进行排序。接下来,我们从最大的

空隙开始,尽量选择填满这些空隙,直到填满M个空隙或者达到终点。在填充空隙

的过程中,我们需要保证每一步跳跃的距离尽可能大,因此我们应该优先填充较大

的空隙。最后,我们返回最大的跳跃距离,这就是最短跳跃距离的最大值。

这个算法的时间复杂度是O(NlogN),其中N是岩石的数量。这是因为我们需要对空

隙进行排序,排序的时间复杂度是O(NlogN)。然后,我们需要遍历空隙,选择填

满空隙,这个过程的时间复杂度是O(N)。因此,总的时间复杂度是O(NlogN)。

2、子串

【问题描述】

有两个仅包含小写英文字母的字符串A和B。现在要从字符串A中取出k

个互不重叠的非空子串,然后把这k个子串按照其在字符串A

中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得这个

新串与字符串B相等?注意:子串取出的位置不同也认为是不同的方案。

【输入格式】

输入文件名为substring.in。

第一行是三个正整数n,m,k,分别表示字符串A的长度,字符串B

的长度,以及问题描述中所提到的k,每两个整数之间用一个空格隔开。

第二行包含一个长度为n的字符串,表示字符串A。

第三行包含一个长度为m的字符串,表示字符串B。

【输出格式】

输出文件名为substring.out。

输出共一行,包含一个整数,表示所求方案数。由于答案可能很大,所以这里要求

输出答案对1,000,000,007取模的结果。

【输入输出样例1】

【输入输出样例2】

【输入输出样例3】

【输入输出样例说明】

所有合法方案如下:(加下划线的部分表示取出的子串)

样例1:aabaab/aabaab

样例2:aabaab/aabaab/aabaab/aabaabaab

您可能关注的文档

文档评论(0)

喵呜刷题 + 关注
实名认证
文档贡献者

来喵呜刷题,完成你的职业蜕变!

1亿VIP精品文档

相关文档