- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
石器时代
StoneAge
(stoneage.pas/p)
1问题描述
借助月光宝盒,探险家尼克来到了石器时代。在热闹的石器时代广场上,不同
部落的原始人来来往往进进出出。但是,石器时代是非常容易爆发的。冲
突爆发时,总是处于绝对优势地位的部落获胜。某一时刻一个部落在时代广场
上有“绝对优势”是指该时刻在广场上此部落的人数比其他部落的人数之和还要
大。出于安全考虑,尼克非常迫切希望知道目前在时代广场上哪个部落有绝对
优势。非常不幸的是尼克只能判断两个原始人是不是属于一个部落。你的任务
就是协助尼克!
2交互约定
本题是交互式问题,你需要和调用库函数来完成输入输出。你得到的库包含如
下几个函数:
•init:初始化函数。只能在调用其它函数前调用,且仅能被调用一次。调
用后石器时代广场被清空。
•getjob为了得到广场上原始人的更新情况,你应该调用本函数。本函数返
回值作如下规定:
–0:表示一个原始人进入了广场;
–一个正整数i:表示第i个进入广场原始人离开了广场;
–-1:表示尼克需要知道当前广场上哪个部落有绝对优势。在下一次
调用本函数前你必须调用且仅调用一次answer函数作为回答;
–-2:表示任务完成。此后不应该有任何其他库函数调用。你的程序
应该马上。
•query(i,j)调用init以后的任何时候你可以调用本函数。本函数测试第i个进
入广场的和第j个进入广场的原始人是不是属于同一个部落,返回TRUE表示
属于同一部落,否则返回FALSE。
•answer(i)i是你的回答。如果目前有部落处于绝对优势地位,则第i个入场
的原始人应该属于该部落并且仍然在场上(i可以是他们中任何一个的入
场序号);如果目前任何一个部落都没有绝对优势,i应该等于0。
1
3库函数定义
对使用pascal语言的选手,Unitstonelib定义如下函数:
•procedureinit;
•functiongetjob:longint;
•functionquery(i,j:longint):boolean;
•procedureanswer(ans:longint);
对使用C/C++语言的选手,stonelib.h定义如下函数:
•voidinit();
•longgetjob();
•boolquery(longi,longj);
•voidanswer(longans);
4交互样例
调用返回解释
initN/A程序初始化,石器时代广场上一个人也没有。
getjob0原始人A第一个进入广场。
getjob0原始人B第二个进入广场。
query(1,2)false查询原始人A和B,发现他们不属于同一个部落。
getjob-1询问:当前存在占绝对优势的部落吗?
answer(0)N/A显然不存在。以0作为回答。
getjob0原始人C第三个进入广场。
getjob-1再次询问是否存在占绝对优势的部落。
query(3,2)true查询C和B,发现他们属于同一个部落。
answer(3)N/A3和2都是占绝对优势的部落的成员,回答其中任何一个即可。
getjob2原始人B离开了广场。
getjob-1再次询问。
answer(0)N/A当前不存在占绝对优势的部落。
getjob1原始人A离开了广场。
getjob-2
文档评论(0)