http://www.Baiduer.com.cn 2010年07月06日 责编:张娜 来源:百度爱好者
百度爱好者(Baiduer.com.cn)消息 2010年6月19日,2010百度之星大赛复赛展开。百度爱好者给大家带了复赛题目,供有兴趣的朋友研究。复赛共十题,上期五期。分别是A+B问题、i-Doctor、url规范化、并行修复、猜猜你在哪儿。 1.A+B问题(时限:5000ms) 问题描述
Suzumiya最近开始无端难她的同学ViVo,总是莫名其妙的问他一些简单而又离谱、没有实际意义的数 学问题,比如三千加上五百等于多少。回答一次两次还可以,但不断这样的纠缠致使ViVo已经无法忍受了。所以ViVo决定制作一个语音装置来自动回答 Suzumiya提出的无聊问题。
ViVo知道你是个伟大的算法艺术家,所以希望该装置核心的数学计算模块你能够来帮忙。装置接收到的语音会自 动为你转化为对应的中文字符串,经过你的模块处理完成后输出中文字符串,传递给装置来朗读出来。
为了给你带来方便,ViVo已经提前收集好了Suzumiya可能会问到的问题,发现这些问题中大部分是数学 加法,也还有一些不是加法的问题,但答案依然都可以用数字来表示。 输入格式
输入的第一行是一个数字n,表示接下来有n个问题,每个问题占一 行。 提示:最终评测时所用的输入数据可以在这里(windows)和这里(linux)下载。 输出格式
每行包含一个没有语病的中文表示最终的结果。 样例输入 2
一加一等于几?
三千加上五百等于多少? 样例输出 二 三千五百 提示
请注意:不要提交你的输出文件,而应当像其他题目一样,提交你的源代码。本题的最终得分计算如下:
假设输入除第一行数字n外有n个非空行,你的输出必须也恰好包含n个非空行,否则本题得 0分。
从前向后一一比较,如果你的输出有m行和标准答案一致,你将得到本题的
3
100*(m/n)%。换句话说,如果你的程序有 70%的行和标准答案一致,你将得到本题约34.3%的分数。 2.i-Doctor(时限:3000ms) 问题描述
百度计划开发一个在线的健康专家系统,帮助用户足不出户就能初步了解自己所患的疾病,并以此向用户推荐适合的 医院就诊。经过对海量数据的分析,百度
提取出了若干表征疾病性状的特征,并把每种疾病是否符合某项特征都进行了标记,最终得到如下数据表格:
其中,D0,D1,„,Dm-1表 示疾病名称,A0,A1,„, An-1表示疾病的特征。m、n均为正整数且m < 4096,n < 128。特征的取值为Yes(符合该项特征), Probably(有可能符合该项特征)或No(不符合该项特征)。
这个专家系统被命名为i-Doctor,因为它的工作方式很人性化,就像医院的专家一样通过与病人的一问一答 来得出诊断。每当开始一个诊断时,i-Doctor首先提问:”你是否感觉到有A症状?” 其中,A为一疾病特征。用户依据自己的感觉回答。 不幸的是,有时候病人对自己是否有A症状不能肯定,甚至会给出错误的回答。统计表明,病人的回答及置信度如下:
注意:每个病人在诊断之前患有一种(且仅一种)确定的疾病,且该疾病保证存在于上述疾病数据库中。
现在,请你编写一个程序来让i-Doctor开始工作。 交互
你的程序应当读写标准输入输出,以便与测试库交互。交互方式如下: 首先,你的程序(doctor)应从标准输入读取疾病特征表。第一行是两个正整数m和n,表示疾病的种类数和特征的种类数。m和n之间以一个空格 隔开。接下来共有m行,其中每一行描述一种疾病,格式为: 疾病名称 特征值0 特征值1 „ 特征值n-1
开头的字符串为疾病名称,长度不超过7字节;一个空格之后依次是各特征值,取值为英文字母Y或N或P,分别表示Yes、No和Probably。相邻特征 值以一个空格隔开。
接下来,你的程序可以向病人(patient)提问,提问方式为在标准输出上打印一行,格式为:Do you feel Ai? 其中Ai表示特征特i。 此后,你的程序应当从标准输入读取病人的回答。病人每次的回答也为一行,内容为Yes、Probably yes、Probably no、No和Don’t know之一。
如此一问一答,直到你的程序诊断出病人所患疾病,此时应在标准输出上打印一行:I think of Dj! 其中Dj为此疾病名称
如果无法确诊,你的程序可以在标准输出上打印一行:Give up. 表示你放弃诊断该病人。注意:很快你将看到,放弃诊断总比错误的诊断要好。 在确诊或放弃后,你的程序应自行终止。
可以在这里 (windows)和这里 (linux)下载测试库(内附使用说明)。 程序举例
下面是一个示例程序(省略了include),它能正确的与测试库进行交互,尽管它的得分可能不高: int main() {
int m, n;
char name[10], line[256]; char table[4096][128][2]; int i, j, q; srand(time(0));
scanf(“%d %d\\n”, &m, &n); for(i = 0; i < m; i++) {
scanf(“%s”, name); for(j = 0; j < n; j++) scanf(“%s”, table[i][j]);
fgetc(stdin); /* consume ‘\\n’ */ }
for(q = 0; q < 4; q++) {
printf(“Do you feel A%d?\\n”, rand() % n); fflush(stdout); /* Important */ fgets(line, sizeof(line), stdin); }
if(rand() % 3 == 0)
printf(“I think of D%d!\\n”, rand() % m); else
printf(“Give up.\\n”);
fflush(stdout); /* Important */ return 0; }
注意,你的程序应当像上面的程序一样,在每次输出后立即执行 fflush(stdout)语句,使输出的内容立即被送入测试库(而不是留在输出缓冲区中)。另外,你的程序应能编译,不能依赖于任何其他外部文件 (包括测试库)。 评分方法
本题一共有25个测试点,每个测试点分值相同。每个测试点对应一个病人,如果你诊断错误或者放弃诊断,则得分 为0。如果你成功诊断,你的得分取决于你询问的次数和其他选手成功诊断该病人所用的询问次数。当然,次数越少得分越高。注意:所有测试点的得分相加后,还 要扣除错误诊断的惩罚。具体来说,每次错误的诊断将扣掉两个测试点的满分(哪怕你没有任何测试点得到了满分)。如果扣除惩罚后,所得的分数为负,总分将调 整为0。 3.url规范化 (时限:5000ms ) 问题描述
互联网上很多不同url都是指向同一页面的,比如:
http://tieba.baidu.com/f?kw=%C9%CF%BA%A3%CA%C0%B2%A9%BB%E1
http://tieba.baidu.com/f?kw=%C9%CF%BA%A3%CA%C0%B2%A9%BB%E1&fr=tb0_search
http://tieba.baidu.com/f?kw=%C9%CF%BA%A3%CA%C0%B2%A9%BB%E1&fr=tb0_search&ie=utf-8
都指向的是同一页面:
http://tieba.baidu.com/f?kw=%C9%CF%BA%A3%CA%C0%B2%A9%BB%E1。
我们需要把不同形式的url规范化,用统一的url代替。目前已经定义了一批规范化规则,你的任务是把一些待处理的url按规则替 换成新的url。 每条规则都是一个字符串。为了方便理解,我们定义如下术语:
通配符:字符’#'或者’*',以及紧跟其后的长度限定符(可选)。其中’#'匹配数字,’*'匹配任意字 符。
长度限定符:紧跟通配符后,格式为[min-max],表示该通配符匹配的字符个数的最小值和最大值,其中 min和max均可以省略(但不能同时省略),当min=max时可以简写为[min]。’#'的默认最小长度为1,’*'为0。二者的默认最大长度均为 无穷大。例如,”#[3]“表示3个连续数字,’*[3-9]‘表示3到9个任意字符,’*[-8]‘表示0-8个任意字符,’#[7-]‘表示至少七个 连续数字。注意,当通配符的后一个字符为左方括号’['时,它总是应当被看作长度限定符的开始标志。
尖括号:成对的小于符号\"<\"和大于符号\">\"。尖括号总是两两配对,不存在无法配对的孤立尖括 号,且尖括号内部不会出现通配符,也不会嵌套另一对尖括号。 规则片段:在处理规则之前,我们把规则分成若干个连续的片段,每个片段是单个通配符(以及紧随其后的长度限定 符,如果有的话)、一对尖括号(以及括号内的字符,如果有的话),或者若干个连续的普通字符(不含通配符和尖括号)。为了避免歧义,规则应当被划分成最少 的片段。不难证明,此时的划分方法是惟一的。
例如,规则\"abc*d#[4-7]eeef 用某一条规则处理url时,我们遵循以下步骤: 第一步:匹配。首先,忽略含有尖括号的规则片段,用其他片段来匹配url,使得每个片段所匹配的字符串从左到右 连接之后和该url完全相等。注意,连接顺序必须按照规则片段的顺序从左到右进行。根据定义,由普通字符组成的片段 只能匹配和它完全相同的字符串,而通配 符可以匹配多样化的字符串,规则如前所述。例如,abc 如果无法匹配,说明该规则不适用于此url,处理结束;但有时会出现匹配方式不止一种的情况,还需要消除歧义。 例如*bc 在本题中,如果出现像这样匹配方法不惟一的情况,你应当选择让从左到右第一个通配符匹配字符数最少的方案。如果还有多种方案,再选择其中让第二个通 配符匹配字符串最少的方案,以此类推。 在上面的例子中,应选择第一种方案。 第二步:替换。对于每对尖括号,把它左边相邻的url片段替换为尖括号内的 文本,然后连接所有url片段(输入数据保证规则不以左尖括号开头,并且相邻两对尖括号之间至少包含一个字符)。我们仍然借助上例说明问题: 也就是说,”abcabca”被规则”*bc 第一行为一个正整数M,说明共有M条规则。第二行为一个正整数N,说明共有N条url。接下来M行,每行代表一条规则,不超过256个字符。 再接下来N行,每行代表一条url。所有URL都去掉了 http:// 头,且不含#*<>四种特殊字符,也不超过256个字符。M<=1000,N<=10000,输入的url和规则均不含汉字。 输出格式 输出共N行。对每一行输入的url,按照输入顺序依次考虑所有规则,直到某个规则修改url时输出替换后的新 url(如果匹配成功,但修改前后url并没有发 生变化,不算修改,应继续尝试剩下的规则),然后忽略剩下的规则。如果没有匹配的规则,则把输入的url 按照原样重新输出。 样例输入 5 7 blog.sina.com.cn/s/blog_*.html*~type=<>*<> you.video.sina.com.cn/*[0]falsepage/<>#<>.html<> club.* blog.sina.com.cn/s/circleinfo_ blog.sina.com.cn/s/blog_4ab97cd40100hwx9.html?t=j1~type=v5_one&label=rela_prevarticle you.video.sina.com.cn/falsepage/1234567.html club.edu.sina.com.cn/index.html www.163.com/ blog.sina.com.cn/s/circleinfo_4859f1fa010004zx_1.html www.sitea.com.cn:8080/a/index.asp www.baidu.com/ 样例输出 blog.sina.com.cn/s/blog_4ab97cd40100hwx9.html?t=j1 you.video.sina.com.cn/ club.club.sina.com.cn/index.html www.163.com/ blog.sina.com.cn/ www.sitea.com.cn:80/a/index.asp www.baidu.com/ 评分方法 本题按测试点评分,每个测试点的得分计算方法如下: 假设输入有n条url,你的输出必须也恰好包含n行,否则本题得0分。 从前向后一一比较,如果你的输出有m行和标准答案一致,你将得到本题的100*(m/n)3%。换句话说,如果你的程序有 70%的行和标准答案一致,你将得到本题约34.3%的分数。 50%的数据保证N<=100,90%的数据保证N<=1000。 4.并行修复 ( 时限:5000ms ) 问题描述 百度的网页按照某种标准均匀划分为N组,每组数据编号为0到N-1的整数。一组网页可以全部存入一个数据库 中。 为了保证数据的可靠性,每一组网页按X份镜像存储,互为备份,且任两份镜像不会分布在同一台主机上。 当有F台机器因故障而失效时,部分网页组对应的镜像数目可能会低于X份,此时需要复制镜像,使系统重新恢复到每组网页均有X份镜像的状态。 假设系统中一共有M台主机,主机编号从0到M-1。每台主机的性能和网络带宽均相同。一台主机最多可以存储T 个大小相同的数据库。每台主机任意时刻最多允许C个并发网络连接。一次复制操作占用源主机和目标主机各一个网络连接,源主机和目标主机不允许相同。若一对 源主机和目标主机在同一时刻进行多次(B > 1)复制操作,则占用源主机和目标主机各B个网络连接。记一份镜像的一次复制用时为1单位。假定每次复制的启动时间点必须为非负整数,请设计一种修复算 法,对于给定的某种镜像分布状态和失效的主机编号集合,输出一种恢复方案,使数据恢复的总用时尽可能短。输入集合保证系统能够从故障中恢复。 下图中给出了当N=4,X=3,M=6,T=6,C=1时,0号主机故障时的一种恢复方案,箭头表示复制的方 向,箭头盘旁的数字代表该次复制的启动时间点。 输入格式 输入包含N+2行。第一行包含五个正整数N,X,M,T,C,接下来的N行依次表示第0到N-1组网页的镜像 分布状态,每行有X列整数,为该组网页的镜像所在的主机编号。 最后一行由F个整数组成,表示故障主机的编号(注意:F本身不在输入中出现,你需要统计最后一行的整数个数,以获取F的值)。 N<=40000,2<=X<=8,2<=M<=4000,T<=600,C<=4,F<=10。 输出格式 输出一个数据恢复方案。方案包含若干行,每行代表一次镜像复制操作,由四个整数W, S, D, T组成。W代表网页组编号,S为源镜像所在主机编号,D为目标镜像所在主机编号,T为复制的启动时间点(起始时间为0)。各复制操作应按照T从小到大排 序。 样例输入 4 3 6 6 1 0 2 3 0 1 4 0 2 3 1 2 3 0 样例输出 0 3 4 0 2 2 5 0 1 1 2 1 样例说明 该方案用了2单位时间(耗时最多的主机编号为2)。 评分方法 本题采用相对评分。对于每个测试点,你的最终得分取决于你输出的方案和其他选手输出的方案的相对优劣程度。 5.猜猜你在哪儿 ( 时限:1000ms ) 问题描述 有一个半径为1米的圆,圆心位于(0,0)点。你和圆处在同一平面上,准备和这个圆一起玩游戏。这个圆每过一 分钟会随机移动一次,一共移动t次。 圆有一个移动距离参数s,每次圆心从(x1,y1)移动到(x2,y2)时总是满足:|x1-x2|<=s, |y1-y2|<=s。 每次圆移动完成后,你可以依次询问k个点是否在圆内,然后任意走到一个新的位置,结束这个 回合。你的目标是尽量让自己位于圆内,并且离圆心越近越好。 每个回合结束后, 若你在圆的边界上或者圆外, 得0分; 若在圆内, 得分为(1-你到圆心的距离/圆的半径)。所有t个回合结束后,每个回合的平均得分就是你对于该测试点的原始得分。 交互 你的程序应当读写标准输入输出,以便与测试库交互。交互方式如下: 首先,你的程序应从标准输入读入三个数t, s, k,分别表示总回合数、圆心移动的距离,以及每回合你可以询问的点数。1<=t<=100, 0 < s < 1, 1<=k<=10。 接下来,你应当分k行给出各个询问点的坐标——每行两个数x和y,即询问坐标为(x,y)的点。每次询问一个点之后,你的程序应当从标准输入读入 一个数a,1表示询问点在圆上或者圆的边界上,0表示在圆外。 再接下来,你的程序应当往标准输出写两个数x和y,表示你要走到的新位置的坐标。 完成所有t个回合之后,你的程序应当自行退出,否则将按超时处理。 可以在这 里(windows)和这里 (linux)下载测试库(内附使用说明)。 程序举例 下面是一个示例程序(省略了include),它能正确的与测试库进行交互,尽管它的得分可能不高: int main() { int t, k; float s; scanf(“%d%f%d”, &t, &s, &k); for(int i = 0; i < t; i++) { for(int j = 0; j < k; j++) { intans = 0; printf(“0.%d 0.%d\\n”, rand(), rand()); fflush(stdout); scanf(“%d”, &ans); // 1表示仍然在圆里或圆的边界上,0表示在圆外 } printf(“0.%d 0.%d\\n”, rand(), rand()); } } 注意,你的程序应当像上面的程序一样,在每次读取新的输入之前调用 fflush(stdout),以确保这之前输出的内容立即被送入测试库(而不是留在输出缓冲区中)。另外,你的程序应能编译,不能依赖于任何其他外 部文件(包括测试库)。 评分方法 本题采用相对评分。对于每个测试点,你的最终得分取决于你的原始得分和其他选手的原始得分的相对优劣程度。 百度之星2010程序设计大赛 复赛试题(下) http://www.Baiduer.com.cn 2010年07月06日 责编:张娜 来源:百度爱好者 百度爱好者(Baiduer.com.cn)消息 2010年6月19日,2010百度之星大赛复赛展开。百度爱好者给大家带了复赛题目,供有兴趣的朋友研究。复赛共十题,下期五期。分别是购物搜索调研、内存碎片、蜗牛、午餐聚会、玉树驰援。 1.购物搜索调研 (时限:1000ms) 问题描述 “有啊”是百度旗下的电子商务购物平台,每天都有上百万的用户在平台上搜索自己想要购买的商品。为了给用户更 好的搜索体验,工程师们准备做一次搜索策略的调研工作。 假设对于某一个特定的查询词来说,一共有N个相关商品,并且通过人工标注得到每个商品与查询词的相关度reli。 当用户输入这个查询词时,可以采取一种非常简单的响应策略,就是在N个相关商品中随机的找一段连续的商品子序列返回给用户。 工程师认为,在每次返回结果中相关度的最小值代表了本次搜索结果的分数score。 用户在搜索时,心中往往会对结果有个期望分数expect,当搜索结果的分数score高于用户的预期 expect时,该用户的满意度为score – expect;否则用户的满意度为0。 假设在上述响应策略中,返回的子序列是完全随机的(即每段连续子序列被选中的概率完全相同),你的任务是计算 每个用户满意度的数学期望。 输入格式 输入第一行包含一个正整数T,表示测试数据的组数。每组测试数据的第一行为相关商品的数量N, 第二行为N个整数,分别表示每个商品与查询词的相关度reli(用空格分隔)。 第三行为一个正整数M,表示参与调研的用户数量,接下来的M行中的每一行都是一个整数expect,表示该用户在搜索时预期的分数值。 其中1 <= T <= 10,1 <= N, M <= 100,000, -109<= reli, expect <= 109。 输出格式 对于每组测试数据,首先输出一行 “Case #:”,其中#表示测试数据编号(从1开始),注意空格与大小写。 接下来的M行,按照输入顺序依次给出每个用户在这种响应策略下满意度的期望值,每个用户占一行。 为了避免精度问题,期望值用最简分数 “A/B” 表示,其中A与B互质,B是正整数。当结果是整数时,应只输出A。 样例输入 3 3 1 3 5 1 2 4 5 -2 1 4 2 1 -1 3 2 4 10 1 0 样例输出 Case 1: 5/6 Case 2: 7/10 3/2 Case 3: 4 样例说明 在Case 1中,可能返回的子序列一共有6个[1], [3], [5], [1 3], [3 5], [1 3 5],对应的分数(相关度最小值)为1, 3, 5, 1, 3, 1,用户满意度依次为0, 1, 3, 0, 1, 0。 每个子序列被返回的概率相同,即为1/6。根据数学期望的定义 可以得出该用户的满意度期望值是5/6。 2.内存碎片 ( 时限:1000ms ) 问题描述 在服务器上运行的模块,往往要连续运行几个月不重启。这期间,各种程序会不停地申请、释放内存,因而导致大量 的内存碎片。 例如,有一块大小为4K的内存,还有一块5K的内存,但是由于二者地址不连续,无法从中申请一块6K的连续内存。 解决这个问题的方法之一是使用内存池,即把已释放的内存块链起来,而不直接还回操作系统,下一次申请这个大小 的内存块的时候,直接从链表里获得内存即可。 然而,这样做有个风险:用户可能在一段时间内只需要长度为L的内存,过一段时间后全部释放;接下来申请长度为L’的内存,造成长度为L的内存大量浪费。为 了避免上述风险, 一般的做法是:当程序申请长度为L的内存时,也可以给它分配一快长度为L’(L’>L)的更大的内存块,并且限 制内存池中内存长度的种类。 给出n个内存块申请,你的任务是计算出在最好情况下,至少需要多少内存才能满足所有的需求。 注意:有的内存池允许将内存块串连起来,组成一个更大的内存块,但是串联需要使用指针,在管理小内存的时候比 较浪费,所以本题规定内存块不许串连。 输入格式 第一行为两个正整数N和K,其中N表示内存请求的数目,K表示内存池中允许有K种不同的长度的内存块。以下N 行每行包含两个正整数Li和Ci, 表示申请长度为Li的内存块Ci次。N<=10000, K<=200, Li< 1000000, Ci<=10000。 输出格式 输出仅一个整数,即在最好情况下,至少需要多少内存才能满足所有的需求。 样例输入 3 2 10 1 11 1 20 1 样例输出 42 样例解释 长度为11的块两个,长度为20的一个。 评分标准 本题有20组数据,每组数据结果正确的情况下,计算时间不得超过1秒。其中,75%的输入数据满足K<=16。 3.蜗牛 (时限:1000ms ) 问题描述 一只蜗牛某天早晨掉进了深为L尺的井中。蜗牛每天白天可以向上爬若干尺,晚上休息时会向下滑若干尺。蜗牛一旦 到达井口或井底,便不再下滑。 假设蜗牛每天向上爬的尺数均为不超过10的正整数,而下滑的尺数为不超过5的正整数。蜗牛在第N天白天里(含 第N天白天结束时)爬出了井,你的任务是统计有多少种可能的爬升/下滑情况。 对于两种爬升/下滑情况,当存在对应的白天上爬或者晚上下滑的尺数不同时,即视为不同的情况。 输入格式 第一行:井深L。其中L为正整数,且L<=100; 第二行:爬出的天数N。其中N为正整数,且N<=300; 输出格式 输出一个正整数,为可能的爬升/下滑情况总数。如不可能在N天白天里(含第N天白天结束时)爬出深为L的井,则应输出0。 样例1 输入: 27 3 输出: 6 解释: 输入指明井深为27。蜗牛掉下去后,在第3天白天爬出了井。一共有6种可能的上升/下滑情况组合: ( 9, -1) (10, -1) 10 8+9+10=27 (10, -1) ( 9, -1) 10 9+8+10=27 (10, -1) (10, -1) 9 9+9+ 9=27 (10, -1) (10, -1) 10 9+9+10>27 (第3天白天未结束时,爬出了井) (10, -1) (10, -2) 10 9+8+10=27 (10, -2) (10, -1) 10 8+9+10=27 样例2 输入: 5 4 输出: 5033 样例3 输入: 42 12 输出: 3106744105061936231 评分标准 本题有20组数据,每组数据结果正确的情况下,计算时间不得超过1秒。其中,75%的输入数据满足N<=12。 4.午餐聚会 (时限:5000ms ) 问题描述 随着百度公司业务规模的不断扩大,员工人数数量激增。为适应互联网的快速变化,保持公司的灵活性,原来的一个 部门被划分为好几个小组便于组织和管理。 划分成几个小组后,基本保证了组内员工的协作性和灵活性,然而不同组之间的员工由于业务上无太多联系,致使组与组之间的员工相对生疏。 为加强公司团队的整体性,促进不同组之间经验的分享,增进不同组之间员工的交流,公司决定在同一部门不同组之间开展“午餐聚会”活动。 操作方法很简单:每次从每个组中各随机选出一名员工一起吃午饭。假设这个部门有N个组,那么每次参加午餐聚会 的人数就为N。 注意,如果这N个人的组合已经出现过一次,则需要重新随机选取。如果某次聚会后,部门中任意两个不同组的员工都曾一同参加过午餐聚会, 表明认识、交流的目的已经达到,因此 不再继续举行午餐聚会。 由于每次参加聚会的人选是随机确定的,总的聚会次数可能很小,也可能很大。为了做预算,你需要计算出聚会次数 的最小值和最大值,并给出最小值对应的方案。 输入格式 第一行为一个正整数,即该部门的组数N(N<=6),接下来的N行,每行包含一个正整数i,代表该组的 员工数(i<=10)。 输出格式 输出第一行包含两个数min和max,其中min为最小聚会次数,max为最大聚会次数。以下min行描述了 聚会次数最小的方案,其中每行描述一次聚会,包含n个参加聚会的员工代号, 从左到右依次代表第一组、第二组、第三组„的组员编号(每组的各组员编号为0到n-1)。 样例输入 4 2 2 2 2 样例输出 5 13 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 评分方法 本题包含若干组的数据。这些数据满足上述规模,并且参考程序可以在2秒之内得到正确结果。注意:参考程序并不能保证对满足规模的任意数据在2秒之内出解,但那些“高难度数据”不会用来评测选手程序。 5.玉树驰援 (时限:120000ms ) 问题描述 4小时以前:青海玉树发生强烈地震,大量房屋倒塌,人员伤亡惨重。灾区急需救援。 2小时以前:迅速成立救灾指挥中心。全国各地情系玉树,纷纷筹集救援物资。 1小时以前:指挥中心将若干与玉树有直接或间接道路交通的地区作为集散点。救援物资分批就近到达集散点后,再由汽车运进灾区。一 批物资有一个唯一的编号,并由若干个集装箱组成。集散点已有不同数量的汽车在等候,指挥中心可以根据需要进行运输调度。汽车装卸物资的时间可忽略不计。一 辆汽车一次最多只能运1个集装箱。 30分钟以前:部分道路由于损坏和堵塞,汽车通行需要较长的时间;部分道路情况更加严重,已经不具备通车条件。指挥中心决定修复 和疏通道路,使道路恢复通车,或缩短通行时间。施工需要一定的时间,而且要封闭道路,即在此过程中不能有汽车在该道路上行驶。足够数量的施工队已经待命, 可以随时对多条道路进行施工。 现在(2010/4/14 11:49):你被紧急征召到指挥中心。你的任务是调度物资运输和道路施工,在最短的时间内将所有物 资运送到玉树灾区。 输入格式 输入由三部分信息组成,依次为交通信息、汽车初始分布信息和物资就绪信息。相邻部分之间用一个空行(\\n)隔开。 第一部分:玉树周边的交通信息。每行描述一条道路,格式如下: 地点A 地点B该道路施工所需小时数(t0) 施工前行驶所需小时数(t1) 施工后行驶所需小时数(t2) 值间以一个空格隔开。道路总数不超过256条,任意两地间最多只有一条双向道路直达。地点名为英文字母和数字组 成的字符串,长度不超过7字节。玉树的地点名为”Yushu”。 t0, t1, t2为整数。如果t1 = -1,表示该条道路在施工完成前无法通车;其它情况下,t0,t1, t2均大于0且不大于24。 一个空行之后,是第二部分:汽车初始分布信息。每行描述某个集散点初始时有多少汽车在等候,格式如下: 地点 数量 值间以一个空格隔开。集散点总数不超过,单个集散点汽车的初始数量不超过1024。 一个空行之后,是第三部分:物资就绪信息。每行描述一批物资在何时何地就绪,格式如下: yyyy/mm/dd HH:MM arrive 地点 物资编号 集装箱数量 值间用一个空格隔开。其中,yyyy/mm/dd HH:MM的时间格式含义为:年/月/日 时:分。物资编号为英文字母和数字组成的字符串,长度不超过7字节。一批物资的集装箱数量不超过2048。 最后一部分以文件结束符结尾。 输入保证所有物资可以在有限时间内运到玉树。 输出格式 你的程序应当按时间顺序在标准输出上打印你下达执行的指令。每条指令一行(不超过255字节,以’\\n’结 尾),每行各值间用一个空格隔开。指令格式具体如下: 道路施工指令 yyyy/mm/dd HH:MM fix 地点A 地点B 该指令表示在指定时间开始对地点A和地点B的直达道路上进行施工。一条道路不得重复施工。 货物运输指令 yyyy/mm/dd HH:MM trans 地点A 地点B 物资编号:本指令运输的集装箱数量 该指令表示在指定时间开始将某种指定数量的物资从地点A运输到地点B。地点A和地点B必须有直达道路。集装箱数量应为正整数。 空车移动指令 yyyy/mm/dd HH:MM move 地点A 地点B 本指令调动的汽车数量 该指令表示在指定时间开始将指定数量汽车从地点A调度到地点B。地点A和地点B必须有直达道路。汽车数量应为正整数。 注意:所有指令涉及到的时间不得早于2010/4/14 11:49(但可以相等),所有指令一旦下达就不能取消或中断。 样例输入 Yushu A1 7 14 7 Yushu A2 2 -1 5 A2 A3 4 9 6 Yushu 3 A1 40 A2 5 A3 15 2010/4/14 11:59 arrive A2 G1 10 样例输出 2010/4/14 11:49 fix Yushu A2 2010/4/14 11:49 move A3 A2 5 2010/4/14 13:59 trans A2 Yushu G1:5 2010/4/14 20:49 trans A2 Yushu G1:5 评分方法 选取用时最短的选手,按此时间取所有选手的即时快照。按物资到达数量降序排序,第1名满分,其后按物资到达数量 比给分。 注:如果没有一个选手完成运输,那么取所有选手的已完成量最大者,按其最后一批物资的到达时间取所有选手的即时快照。 如果所有选手均没有将任何物资运送到玉树,则该测试点所有选手均得0分。 如果输出的指令及其运行不符合题目规定,相应测试点得0分。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务