百度之星Astar2012程序设计大赛初赛试题及参考答案_第1页
百度之星Astar2012程序设计大赛初赛试题及参考答案_第2页
百度之星Astar2012程序设计大赛初赛试题及参考答案_第3页
百度之星Astar2012程序设计大赛初赛试题及参考答案_第4页
百度之星Astar2012程序设计大赛初赛试题及参考答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、选出当场成绩在前400名的选手进入复赛(第一场已经进入复赛的选手参加第二场比赛如果再次晋级,将被不在第二场参与排名)。2012年6月2日,2012百度之星Astar2012程序设计大赛初赛打开大幕。这里提供了初赛第一场的题目,供有未进初赛和其它有兴趣的朋友研究。初赛第一场共4题。分别是度度熊就是要第一个出场、小小度刷礼品、集合的交与并、轮子上的度度熊。目录比赛说明···················

3、83;··· 1·A:度度熊就是要第一个出场·············· 2·B:小小度刷礼品··················· 5·C:集合的交与并····

4、3;···············6·D:轮子上的度度熊···················6·A:度度熊就是要第一个出场题目描述Baidu年会安排了一场时装秀节目。N名员工将依次身穿盛装上台表演。表演的顺序是通过一种“画线”抽签的方式决

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

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

7、;=100, 0<=M<=1000, 1<=K<=N),分别代表参与表演的员工人数、画下的横线数目以及度度熊的员工编号。每组数据的第2M+1行每行包含3个整数, xl, xr, y, (1 <= xl < N, xr = xl + 1, 0 <= y <= 1,000,000),描述了一条横线的位置。输出对于每组数据输出一行Yes或者No,表示度度熊能否通过增加一条横线段来使得自己变成第一位出场表演。如果度度熊已经是第一位出场表演,也输出Yes。注意,尽管输入数据中员工画的横线高度都是整数,但是度度熊可以在任意实数高度画横线。此外,度度熊和员工一

8、样,在画横线时需要避免在同一位置重复画线,也要避免两条相邻的横线连在一起。样例输入24 6 31 2 11 2 41 2 62 3 22 3 53 4 44 0 3样例输出YesNo#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;struct nodeint l,r,y;line1010;struct node1int t,b,pos;a1010,b1010;bool cmp(node a,node b)

9、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",&n,&m,&k);for(i=0;i<m;i+)scanf("%d%d%d",&linei.l,&linei.r,&linei.y);sort(line,li

10、ne+m,cmp);pos = k;afi=0;h = aafi.t = 1000000;while(true)flag = false;for(i=0;i<m;i+)if(linei.l=pos&&linei.y<h)h = aafi.b = aafi+1.t = linei.y;aafi.pos = pos;pos = linei.r;afi+;flag = true;else if(linei.r=pos&&linei.y<h)h = aafi.b = aafi+1.t = linei.y;aafi.pos = pos;pos = lin

11、ei.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;i<m;i+)if(linei.l=pos&&linei.y>h)h = bbfi.t = bbfi+1.b = linei.y;bbfi.pos = pos;po

12、s = linei.r;bfi+;flag = true;else if(linei.r=pos&&linei.y>h)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 =

13、 true;break;ha = ai.b;hb = bj.b;if(ha>hb&&i!=afi)i+;else if(hb>ha&&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:小小度刷礼品题目描述

14、一年一度的百度之星又开始了,这次参赛人数创下了吉尼斯世界纪录,于是百度之星决定奖励一部分人:所有资格赛提交ID以x结尾的参赛选手将得到精美礼品一份。小小度同学非常想得到这份礼品,于是他就连续狂交了很多次,提交ID从a连续到b,他想问问你他能得到多少份礼品,你能帮帮他吗?输入第一行一个正整数T表示数据组数;接下去T行,每行三个正整数x,a,b (0 <=x <= 1018, 1 <= a,b <= 1018,a <= b)输出T行,每行为对应的数据情况下,小小度得到的礼品数样例输入188888 88888 88888样例输出1#include <stdio.h

15、>#include <iostream>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 (t-)scanf("%lld %lld %lld",&x,&a,&b);long long cnt=0;int len_x=sizeof(x)/sizeof(int);int len_a=si

16、zeof(a)/sizeof(int);int len_b=sizeof(b)/sizeof(int);for (long long i=a; i<=b; +i)int len_i=sizeof(i)/sizeof(int);if (0=(a-x)%fun(len_i-len_x)cnt+;i+=x;printf ("%lldn",cnt);return 0;C:集合的交与并对于一个闭区间集合A1,A2AK(K>1,AiAjij),我们定义其权值其中|X|表示X区间的长度;如果X为空集|X|=0。当然,如果这些闭区间没有交集则权值为0。给定N个各不相同的闭区间,

17、请你从中找出若干个(至少2个)区间使其权值最大。输入第一行一个整数N (2 <= N <= 105)接下来N行每行两个整数 l r(1<=l<=r<=106),表示闭区间的两个端点。输出最大权值样例输入41 64 82 73 5样例输出24D:轮子上的度度熊百度楼下有一块很大很大的广场。广场上有很多轮滑爱好者,每天轮滑爱好者们都会在广场上做一种叫做平地花式轮滑的表演。度度熊也想像他们一样在轮上飞舞,所以也天天和他们练习。因为度度熊的天赋,一下就学会了好多动作。但他觉得只是单独的做动作很没意思,动作的组合才更有欣赏性。平地花式轮滑(简称平花),是穿轮滑鞋在固定数量的

18、标准桩距间做无跳起动作的各式连续滑行。度度熊表演的舞台上总共有N个桩,而他也从自己会的动作中挑出M最好看的。但事情并没有这么简单。首先每个动作因为复杂度不同,所以经过的桩的个数也不尽相同。然后,为了保持连贯性,有些动作是接不起来的,所以每个动作都有他前面能接的一个动作的列表。更有甚者,有的动作要考虑前两个动作才能确定是否能做出来。因此动作被分为三类:0型动作,无论前面是什么动作都能做出来,所以这种动作也能作为起始动作;1型动作,要考虑前面那个动作才能确定是否能接上;2型动作,要考虑前面两个动作才能确定是否能接上。最后,评分也很复杂。每个动作有个单独得分,只要在表演过程中做了这个动作就能获得这个

19、分数。有些动作的组合也非常好看,也会有相应的得分。不过要获得某个组合的得分就要在过程中完成这组组合中所有的动作,但是,这些动作既不要求按顺序完成也不要求连续完成。当然,大家不喜欢重复的动作,所以同一个动作和同一个组合不会获得两次得分。举个例子,总共有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+3+4=11个桩,超过了总桩数,所以不行。2、动作1+动作3,同样也完成了一个组合,也满足各个动作要求的限定条件。但是做完后,只过了9个桩,没有完成整个表演。这样度度熊会很尴尬的。所以这样的方案也不行。最优方案应该是动作2+动作3,满足桩数要求,也满足各个动作前置限定条件。最后得分:单项动作14分+组合加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论