百度之星Astar2012程序设计大赛初赛试题及参考答案.doc

上传人:1595****071 文档编号:37284029 上传时间:2022-08-30 格式:DOC 页数:13 大小:82.50KB
返回 下载 相关 举报
百度之星Astar2012程序设计大赛初赛试题及参考答案.doc_第1页
第1页 / 共13页
百度之星Astar2012程序设计大赛初赛试题及参考答案.doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《百度之星Astar2012程序设计大赛初赛试题及参考答案.doc》由会员分享,可在线阅读,更多相关《百度之星Astar2012程序设计大赛初赛试题及参考答案.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、百度之星Astar2012程序设计大赛初赛试题13 / 13百度之星Astar2012程序设计大赛初赛试题(第一场)及B题答案比赛说明百度之星初赛:2012年6月2日、6月3日10:00Am12:00Pm本次大赛的初赛的初赛采取在线答题、编译,离线判题的形式,选手报名后,可以在6月2日、6月3日任选一天参加比赛,也可选择两场都参加。针对每题,交题后,系统将给出程序编译是否正确的结果,但不会给出程序是否通过全部测试数据的评价;当场比赛结束后,所有选手的针对每题所写的程序将被离线评判,每题根据程序通过测试数据的数目计算得分。每场初赛根据单场所有题目总分计算成绩,选出当场成绩在前400名的选手进入复

2、赛(第一场已经进入复赛的选手参加第二场比赛如果再次晋级,将被不在第二场参与排名)。2012年6月2日,2012百度之星Astar2012程序设计大赛初赛打开大幕。这里提供了初赛第一场的题目,供有未进初赛和其它有兴趣的朋友研究。初赛第一场共4题。分别是度度熊就是要第一个出场、小小度刷礼品、集合的交与并、轮子上的度度熊。目录比赛说明 1A:度度熊就是要第一个出场 2B:小小度刷礼品 5C:集合的交与并6D:轮子上的度度熊6A:度度熊就是要第一个出场题目描述Baidu年会安排了一场时装秀节目。N名员工将依次身穿盛装上台表演。表演的顺序是通过一种“画线”抽签的方式决定的。首先,员工们在一张白纸上画下N

3、条平行的竖线。在竖线的上方从左到右依次写下1至N代表员工的编号;在竖线的下方也从左到右依次写下1至N代表出场表演的次序。接着,员工们随意在两条相邻的竖线间添加垂直于竖线的横线段。最后,每位员工的出场顺序是按如下规则决定的:每位员工从自己的编号开始用手指沿竖线向下划,每当遇到横线就沿横线移动到相邻的竖线上去,直到手指到达竖线下方的出场次序编号。这时手指指向的编号就是该员工的出场次序。例如在下图的例子中,度度熊将第二名出场,第一名出场的是员工4。员工在画横线时,会避免在同一位置重复画线,并且避免两条相邻的横线连在一起。即下图所示的情况是不会出现的:给定一种画线的方案,员工编号为K的度度熊想知道自己

4、是不是第一位出场表演的。如果不是,度度熊想知道自己能不能通过增加一条横线段来使得自己变成第一位出场表演。输入为了描述方便,我们规定写有员工编号的方向是y轴正方向(即上文中的竖线上方),写有出场次序的方向是y轴负方向(即上文中的竖线下方)。竖线沿x轴方向(即上文中从左到右)依次编号1至N。于是,每条横线的位置都可以由一个三元组确定,其中xl, xr是横线左右两个端点所在竖线的编号,y是横线的高度。输入第一行是一个整数T(T = 50),代表测试数据的组数。每组数据的第一行包含三个整数N, M,K( 1=N=100, 0=M=1000, 1=K=N),分别代表参与表演的员工人数、画下的横线数目以及

5、度度熊的员工编号。每组数据的第2M+1行每行包含3个整数, xl, xr, y, (1 = xl N, xr = xl + 1, 0 = y = 1,000,000),描述了一条横线的位置。输出对于每组数据输出一行Yes或者No,表示度度熊能否通过增加一条横线段来使得自己变成第一位出场表演。如果度度熊已经是第一位出场表演,也输出Yes。注意,尽管输入数据中员工画的横线高度都是整数,但是度度熊可以在任意实数高度画横线。此外,度度熊和员工一样,在画横线时需要避免在同一位置重复画线,也要避免两条相邻的横线连在一起。样例输入24 6 31 2 11 2 41 2 62 3 22 3 53 4 44 0

6、 3样例输出YesNo#include #include #include #include using namespace std;struct nodeint l,r,y;line1010;struct node1int t,b,pos;a1010,b1010;bool cmp(node a,node b)return a.y b.y;bool cmp1(node a,node b)return a.y b.y;int main()int t,n,m,k,i,j,pos,afi,bfi,h,ha,hb;bool flag;scanf(%d,&t);while(t-)scanf(%d%d%d

7、,&n,&m,&k);for(i=0;im;i+)scanf(%d%d%d,&linei.l,&linei.r,&linei.y);sort(line,line+m,cmp);pos = k;afi=0;h = aafi.t = 1000000;while(true)flag = false;for(i=0;im;i+)if(linei.l=pos&linei.yh)h = aafi.b = aafi+1.t = linei.y;aafi.pos = pos;pos = linei.r;afi+;flag = true;else if(linei.r=pos&linei.yh)h = aafi

8、.b = aafi+1.t = linei.y;aafi.pos = pos;pos = linei.l;afi+;flag = true;if(flag)break;if(!flag)break;aafi.b = 0;aafi.pos = pos;if(pos=1)printf(Yesn);continue;sort(line,line+m,cmp1);pos = 1;bfi=0;h = bbfi.b = 0;while(true)flag = false;for(i=0;ih)h = bbfi.t = bbfi+1.b = linei.y;bbfi.pos = pos;pos = line

9、i.r;bfi+;flag = true;else if(linei.r=pos&linei.yh)h = bbfi.t = bbfi+1.b = linei.y;bbfi.pos = pos;pos = linei.l;bfi+;flag = true;if(flag)break;if(!flag)break;bbfi.t = 1000000;bbfi.pos = pos;flag = false;for(i=0,j=bfi;i!=afi&j!=0;)if(ai.pos+1=bj.pos|ai.pos-1=bj.pos)flag = true;break;ha = ai.b;hb = bj.

10、b;if(hahb&i!=afi)i+;else if(hbha&j!=0)j-;elseif(i!=afi)i+;if(j!=0)j-;if(afi=0&bfi=0)if(k=1)printf(Yesn);elseprintf(Non);continue;if(flag)printf(Yesn);elseprintf(Non);return 0;B:小小度刷礼品题目描述一年一度的百度之星又开始了,这次参赛人数创下了吉尼斯世界纪录,于是百度之星决定奖励一部分人:所有资格赛提交ID以x结尾的参赛选手将得到精美礼品一份。小小度同学非常想得到这份礼品,于是他就连续狂交了很多次,提交ID从a连续到b,

11、他想问问你他能得到多少份礼品,你能帮帮他吗?输入第一行一个正整数T表示数据组数;接下去T行,每行三个正整数x,a,b (0 =x = 1018, 1 = a,b = 1018,a = b)输出T行,每行为对应的数据情况下,小小度得到的礼品数样例输入188888 88888 88888样例输出1#include #include using namespace std;long long fun(int n)long long sum=1;while (n-)sum*=10;return sum;int main()int t;long long x,a,b;scanf(%d,&t);while

12、 (t-)scanf(%lld %lld %lld,&x,&a,&b);long long cnt=0;int len_x=sizeof(x)/sizeof(int);int len_a=sizeof(a)/sizeof(int);int len_b=sizeof(b)/sizeof(int);for (long long i=a; i1,AiAjij),我们定义其权值其中|X|表示X区间的长度;如果X为空集|X|=0。当然,如果这些闭区间没有交集则权值为0。给定N个各不相同的闭区间,请你从中找出若干个(至少2个)区间使其权值最大。输入第一行一个整数N (2 = N = 105)接下来N行每行

13、两个整数 l r(1=l=r=106),表示闭区间的两个端点。输出最大权值样例输入41 64 82 73 5样例输出24D:轮子上的度度熊百度楼下有一块很大很大的广场。广场上有很多轮滑爱好者,每天轮滑爱好者们都会在广场上做一种叫做平地花式轮滑的表演。度度熊也想像他们一样在轮上飞舞,所以也天天和他们练习。因为度度熊的天赋,一下就学会了好多动作。但他觉得只是单独的做动作很没意思,动作的组合才更有欣赏性。平地花式轮滑(简称平花),是穿轮滑鞋在固定数量的标准桩距间做无跳起动作的各式连续滑行。度度熊表演的舞台上总共有N个桩,而他也从自己会的动作中挑出M最好看的。但事情并没有这么简单。首先每个动作因为复杂

14、度不同,所以经过的桩的个数也不尽相同。然后,为了保持连贯性,有些动作是接不起来的,所以每个动作都有他前面能接的一个动作的列表。更有甚者,有的动作要考虑前两个动作才能确定是否能做出来。因此动作被分为三类:0型动作,无论前面是什么动作都能做出来,所以这种动作也能作为起始动作;1型动作,要考虑前面那个动作才能确定是否能接上;2型动作,要考虑前面两个动作才能确定是否能接上。最后,评分也很复杂。每个动作有个单独得分,只要在表演过程中做了这个动作就能获得这个分数。有些动作的组合也非常好看,也会有相应的得分。不过要获得某个组合的得分就要在过程中完成这组组合中所有的动作,但是,这些动作既不要求按顺序完成也不要

15、求连续完成。当然,大家不喜欢重复的动作,所以同一个动作和同一个组合不会获得两次得分。举个例子,总共有10个桩,有以下几个动作:动作1:0型,需要3个桩,得分5。动作2:0型,需要4个桩,得分4。动作3:1型,能接在动作1或者动作2后面,需要6个桩,得分10。动作4:2型,要接在动作2+动作1后面,需要4个桩,得分30。组合1:(动作1,动作2,动作4),得分15。组合2:(动作1,动作3),得分10。组合3:(动作2,动作3),得分5。能配成的方案不少,但有这么几种方案是不行的:1、动作2+动作1+动作4,虽然,动作4分数很多,而且1,2,4的组合还能额外获得15分。但是,这个方案总共要用4+

16、3+4=11个桩,超过了总桩数,所以不行。2、动作1+动作3,同样也完成了一个组合,也满足各个动作要求的限定条件。但是做完后,只过了9个桩,没有完成整个表演。这样度度熊会很尴尬的。所以这样的方案也不行。最优方案应该是动作2+动作3,满足桩数要求,也满足各个动作前置限定条件。最后得分:单项动作14分+组合加分5分=19分。虽然,度度熊一下就算出来自己应该怎么表演了。但是他还是想考考精通编程的你。输入一开始一个整数T(1 = T = 5),表示有T组数据,每个数据如下格式:第一行有三个整数,N,M,P。分别表示桩数、动作数和组合数。第二行M个02的整数,表示每个动作的类型。第三行M个整数,表示每个

17、动作需要使用的桩数。第四行M个整数,表示每个动作单项的分数。接下来P(P=1024)行,每行描述一个组合。每行的前两个数X,Y,X表示组合中总共有X个动作,Y表示组合能获得的分数。后面接X个数,表示组合中包含的X个动作的编号。再接下来分为M块,第i块描述第i个动作的前置条件。若第i个动作是0型的,那么它没有前置条件。所以对应的块是一个空行。若第i个动作是1型的,对应的块是一个M的01序列。若这个序列是Aj的话,Aj=1表示动作i可以接在动作j后面。若第i个动作是2型的,对应的块是一个MxM的01矩阵。若这个序列是Aj,k的话,Aj,k=1表示动作i可以接在动作j+动作k后面。输出对于每个数据,输出包含一个整数,表示度度熊能获得的最高分数。样例输入110 4 30 0 1 23 4 6 45 4 10 303 15 1 2 42 10 1 32 5 2 31 1 0 00 0 0 01 0 0 00 0 0 00 0 0 0样例输出19提示保证至少有一个方案满足要求。对于100%的数据,1N100,1M10,所有分数之和在32位有符号整数范围之内。每个动作至少需要过1个桩。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁