2016华为软件精英挑战赛赛题及其答疑汇总
2016-03-08 09:55
344 查看
注:本文文字均摘自官方指定网站和论坛,权威且可信,众玩家可放心阅读。
前言
赛题源自“未来网络”业务发放中的路由计算问题。算路问题属于基础算法问题,在图论、网络、交通等各个方面均有着广泛的研究与运用,里面不乏一些经典的算法,例如最短路中的广度优先搜索,Dijkstra算法等。网络算路问题的更优算法实现对于网络资源高效配置具有重要价值。
1 问题定义
给定一个带权重的有向图G=(V,E),V为顶点集,E为有向边集,每一条有向边均有一个权重。对于给定的顶点s、t,以及V的子集V',寻找从s到t的不成环有向路径P,使得P经过V'中所有的顶点(对经过V'中节点的顺序不做要求)。
若不存在这样的有向路径P,则输出无解,程序运行时间越短,则视为结果越优;若存在这样的有向路径P,则输出所得到的路径,路径的权重越小,则视为结果越优,在输出路径权重一样的前提下,程序运行时间越短,则视为结果越优。
说明:
1)图中所有权重均为[1,20]内的整数;
个人吐槽:没有复权值,经典Dijkstra算法可能适用
2)任一有向边的起点不等于终点;
个人吐槽:极端情况被踢出,减小难度
3)连接顶点A至顶点B的有向边可能超过一条,其权重可能一样,也可能不一样;
个人吐槽:不一样就取较小者
4)该有向图的顶点不会超过600个,每个顶点出度(以该点为起点的有向边的数量)不超过8;
5)V'中元素个数不超过50;
个人吐槽:指定点集越多,耗时越夸张,难点之一,优化点之一。
6)从s到t的不成环有向路径P是指,P为由一系列有向边组成的从s至t的有向连通路径,且不允许重复经过任一节点;
7)路径的权重是指所有组成该路径的所有有向边的权重之和。
2 输入与输出
输入文件格式
以两个.csv 文件(csv 是以逗号为分隔符的文本文件)给出输入数据,一个为图的数据(G),一个为需要计算的路径信息(s,t,V')。文件每行以换行符(ASCII'\n'即0x0a)为结尾。
1)图的数据中,每一行包含如下的信息:
LinkID,SourceID,DestinationID,Cost
其中,LinkID 为该有向边的索引,SourceID 为该有向边的起始顶点的索引,DestinationID为该有向边的终止顶点的索引,Cost 为该有向边的权重。顶点与有向边的索引均从0 开始 编号(不一定连续,但用例保证索引不重复)。
2)路径信息中,只有一行如下数据:
SourceID,DestinationID,IncludingSet
其中,SourceID 为该路径的起点,DestinationID 为该路径的终点,IncludingSet 表示必须经过的顶点集合V',其中不同的顶点索引之间用'|'分割。
输出文件格式
输出文件同样为一个.csv 文件。
1)如果该测试用例存在满足要求的有向路径P,则按P 经过的有向边顺序,依次输出有向边的索引,索引之间用'|'分割;
2)如果该测试用例不存在满足要求的有向路径P,则输出两个字符NA;
3)只允许输出最多一条有向路径。
3 单个用例的评分机制
有解用例的排名机制
按下面流程对参赛者结果进行排名:
Step1: 对于提交的结果,进行合法性检验(详见题目描述);
Step2: 程序运行时间不得超过10s;
若不满足上述的结果则本用例得分为0;
Step3: 计算提交的路径的权重,权重越小,排名越优;
Step4: 在权重相同的结果里,用程序运行时间进行排名,时间越短,排名越优。
无解用例的排名机制
按下列流程对参赛者结果进行排名:
Step1: 对于提交的结果,验证是否识别出该用例无解,若无法识别或者算法运行时间超10s,则本用例得分为0;
Step2: 用程序的运行时间进行排名,时间越短,排名越优。
单个用例的评分标准如下:
根据上面排名流程得到的排名,使用标准分计分(排名第一的提交者为100分)。
若所有人均未得到正确结果,则所有人均得分为0。
4 最终得分机制
平台会使用N个测试用例判题,该N个测试用例分为初级、中级、高级三个等级,参赛者对于每个测试用例都会得到一个百分制分数,使用加权平均分(初级权重为0.2,中级权重为0.3,高级权重为0.5)作为该参赛者的最终得分。
特别说明:在比赛初期,平台只放出初级、中级的测试用例,故此时满分为50分,在比赛后期,才会放出高级测试用例(具体发放时间会在网站公告通知),此时满分才为100分,请各位参赛者注意。
5 简单用例说明
在如上图所示的有向图中,我们会得到下面的有向图信息:
0,0,1,1
1,0,2,2
2,0,3,1
3,2,1,3
4,3,1,1
5,2,3,1
6,3,2,1
如果此时需要寻找从0到1的路径,且必须经过顶点2和3,我们会得到如下的路径信息:
0,1,2|3
对于该用例,可以找到如下两条可行路径:
1|5|4
2|6|3
由于第一条路径的权重为4,第二条路径的权重为5,所以此时最优解应该1|5|4。
运行环境
CPU:Intel Xeon CPU E5-2690 V2 @ 3.00GHz
内存:2G
内核:单核
编译器:gcc 4.8.4;java 1.7.0_95;
操作系统:linux Ubuntu 14.04.3 LTS,内核版本 Linux version 3.13.0-24-gineric
SDK:为方便选手做题,分别提供c++(兼容c)和Java SDK包供参考(见赛题下载包),详细描述信息请见SDK目录下的readme.txt。
讨论交流
武长赛区QQ群 117280759
杭厦赛区QQ群 131946455
上合赛区QQ群 221036348
粤港澳赛区QQ群 493667385
西北赛区QQ群 389603273
南京苏州赛区QQ群 545377507
京津东北赛区QQ群 271699173
成渝赛区QQ群 537141027
-------------------------------------------------------------------------------------------------------------------------------------------------
赛题答疑:
a)关于赛题:
问:V‘是否包含s,t?
答:不包含。虽然理论上来说,V'包含s,t也是合法的,但是没有意义,徒增程序工作量
问:P是否不能经过V'之外的点?
答:如果能够不经过V‘之外的点算出一条路也可以,但是绝大多数情况下是需要经过V'之外的点。
问:边与顶点索引的最大值是多少?
答:顶点的索引是[0,600]的正整数,边的索引是[0,4800]的正整数。
问:可以多次提交吗?
答:可以多次提交,目前暂定每人每天可以提交五次。得分以最新提交的程序为准。
问:这次比赛可以提供虚拟机环境吗?
答:抱歉,本次比赛不提供编程机器。如果只有windows,没有linux环境,建议安装virtualbox+ubuntu参赛
b)关于工程环境
问:是否限制编译选项?
答:作为面向对象的程序员,大赛约定的接口是可执行的程序,编译选项是实现细节,我们看不到也不关心。
问:是否允许并行计算?
答:算法难点不在于并行算法,而且初赛阶段判卷环境限制为单核,想并行也并行不起来。
问:使用Java性能上是否吃亏,会否给时间补偿?
答:1、对于我们这种算法题,并不会用到太多的java特性。一般说java比c++/c慢,是由于一些OO特性、GC等等造成的,而我们这道题并不需要用到OO,也没有太多内存动态申请的地方;
2、只有在算出路径权重一样的情况下,才会考虑使用性能排名,对于复杂的用例来说,不同的算法算出一样权重的概率很小。即使算出权重一样,由于性能吃亏而排名降低,也可能就低了一名,分数也就低了0.x分(如果是1万人参加排名,低一名只会少0.01分)
3、如果要给出补偿的话,找不出一个合适的补偿值,补偿的过高c++/c选手也会不满意的。
问1:demand文件是不是可以同时输入多行,然后程序分别对这多行需求做处理。
问2:如果demand文件多行,输出文件也按多行输出并与之对应?
问3:还有测试数据吗?什么时候放,放多少?
答:1不会多行,程序每次运行都只处理一个测试用例。2不会多行。3有的,今天就会放出一个更复杂点的测试,用例供大家调测使用。
c)关于参赛资格
问:有的学校未被邀请参赛,但是学生想参加怎么办?
答:正在添加相关的学校,您可以先做做题,报名晚几天也没影响的。
----------------------------------------------------------------------------------------------------------------------------------
大赛邮箱:codecraft@huawei.com
大赛网址:http://codecraft.huawei.com
----------------------------------------------------------------------------------------------------------------------------------
这里链接一个很早就写出程序的玩家(不一定是对的,请自行思量):
http://blog.csdn.net/lwtdzh999/article/details/50804713
----------------------------------------------------------------------------------------------------------------------------------
自己也绑了条大腿.....
----------------------------------------------------------------------------------------------------------------------------------
参考资源:
【1】http://bbs.csdn.net/topics/391911624?page=1
【2】大赛网址:http://codecraft.huawei.com
【3】CSDN论坛,http://bbs.csdn.net/forums/hwcodecraft
前言
赛题源自“未来网络”业务发放中的路由计算问题。算路问题属于基础算法问题,在图论、网络、交通等各个方面均有着广泛的研究与运用,里面不乏一些经典的算法,例如最短路中的广度优先搜索,Dijkstra算法等。网络算路问题的更优算法实现对于网络资源高效配置具有重要价值。
1 问题定义
给定一个带权重的有向图G=(V,E),V为顶点集,E为有向边集,每一条有向边均有一个权重。对于给定的顶点s、t,以及V的子集V',寻找从s到t的不成环有向路径P,使得P经过V'中所有的顶点(对经过V'中节点的顺序不做要求)。
若不存在这样的有向路径P,则输出无解,程序运行时间越短,则视为结果越优;若存在这样的有向路径P,则输出所得到的路径,路径的权重越小,则视为结果越优,在输出路径权重一样的前提下,程序运行时间越短,则视为结果越优。
说明:
1)图中所有权重均为[1,20]内的整数;
个人吐槽:没有复权值,经典Dijkstra算法可能适用
2)任一有向边的起点不等于终点;
个人吐槽:极端情况被踢出,减小难度
3)连接顶点A至顶点B的有向边可能超过一条,其权重可能一样,也可能不一样;
个人吐槽:不一样就取较小者
4)该有向图的顶点不会超过600个,每个顶点出度(以该点为起点的有向边的数量)不超过8;
5)V'中元素个数不超过50;
个人吐槽:指定点集越多,耗时越夸张,难点之一,优化点之一。
6)从s到t的不成环有向路径P是指,P为由一系列有向边组成的从s至t的有向连通路径,且不允许重复经过任一节点;
7)路径的权重是指所有组成该路径的所有有向边的权重之和。
2 输入与输出
输入文件格式
以两个.csv 文件(csv 是以逗号为分隔符的文本文件)给出输入数据,一个为图的数据(G),一个为需要计算的路径信息(s,t,V')。文件每行以换行符(ASCII'\n'即0x0a)为结尾。
1)图的数据中,每一行包含如下的信息:
LinkID,SourceID,DestinationID,Cost
其中,LinkID 为该有向边的索引,SourceID 为该有向边的起始顶点的索引,DestinationID为该有向边的终止顶点的索引,Cost 为该有向边的权重。顶点与有向边的索引均从0 开始 编号(不一定连续,但用例保证索引不重复)。
2)路径信息中,只有一行如下数据:
SourceID,DestinationID,IncludingSet
其中,SourceID 为该路径的起点,DestinationID 为该路径的终点,IncludingSet 表示必须经过的顶点集合V',其中不同的顶点索引之间用'|'分割。
输出文件格式
输出文件同样为一个.csv 文件。
1)如果该测试用例存在满足要求的有向路径P,则按P 经过的有向边顺序,依次输出有向边的索引,索引之间用'|'分割;
2)如果该测试用例不存在满足要求的有向路径P,则输出两个字符NA;
3)只允许输出最多一条有向路径。
3 单个用例的评分机制
有解用例的排名机制
按下面流程对参赛者结果进行排名:
Step1: 对于提交的结果,进行合法性检验(详见题目描述);
Step2: 程序运行时间不得超过10s;
若不满足上述的结果则本用例得分为0;
Step3: 计算提交的路径的权重,权重越小,排名越优;
Step4: 在权重相同的结果里,用程序运行时间进行排名,时间越短,排名越优。
无解用例的排名机制
按下列流程对参赛者结果进行排名:
Step1: 对于提交的结果,验证是否识别出该用例无解,若无法识别或者算法运行时间超10s,则本用例得分为0;
Step2: 用程序的运行时间进行排名,时间越短,排名越优。
单个用例的评分标准如下:
根据上面排名流程得到的排名,使用标准分计分(排名第一的提交者为100分)。
若所有人均未得到正确结果,则所有人均得分为0。
4 最终得分机制
平台会使用N个测试用例判题,该N个测试用例分为初级、中级、高级三个等级,参赛者对于每个测试用例都会得到一个百分制分数,使用加权平均分(初级权重为0.2,中级权重为0.3,高级权重为0.5)作为该参赛者的最终得分。
特别说明:在比赛初期,平台只放出初级、中级的测试用例,故此时满分为50分,在比赛后期,才会放出高级测试用例(具体发放时间会在网站公告通知),此时满分才为100分,请各位参赛者注意。
5 简单用例说明
在如上图所示的有向图中,我们会得到下面的有向图信息:
0,0,1,1
1,0,2,2
2,0,3,1
3,2,1,3
4,3,1,1
5,2,3,1
6,3,2,1
如果此时需要寻找从0到1的路径,且必须经过顶点2和3,我们会得到如下的路径信息:
0,1,2|3
对于该用例,可以找到如下两条可行路径:
1|5|4
2|6|3
由于第一条路径的权重为4,第二条路径的权重为5,所以此时最优解应该1|5|4。
运行环境
CPU:Intel Xeon CPU E5-2690 V2 @ 3.00GHz
内存:2G
内核:单核
编译器:gcc 4.8.4;java 1.7.0_95;
操作系统:linux Ubuntu 14.04.3 LTS,内核版本 Linux version 3.13.0-24-gineric
SDK:为方便选手做题,分别提供c++(兼容c)和Java SDK包供参考(见赛题下载包),详细描述信息请见SDK目录下的readme.txt。
讨论交流
武长赛区QQ群 117280759
杭厦赛区QQ群 131946455
上合赛区QQ群 221036348
粤港澳赛区QQ群 493667385
西北赛区QQ群 389603273
南京苏州赛区QQ群 545377507
京津东北赛区QQ群 271699173
成渝赛区QQ群 537141027
-------------------------------------------------------------------------------------------------------------------------------------------------
赛题答疑:
a)关于赛题:
问:V‘是否包含s,t?
答:不包含。虽然理论上来说,V'包含s,t也是合法的,但是没有意义,徒增程序工作量
问:P是否不能经过V'之外的点?
答:如果能够不经过V‘之外的点算出一条路也可以,但是绝大多数情况下是需要经过V'之外的点。
问:边与顶点索引的最大值是多少?
答:顶点的索引是[0,600]的正整数,边的索引是[0,4800]的正整数。
问:可以多次提交吗?
答:可以多次提交,目前暂定每人每天可以提交五次。得分以最新提交的程序为准。
问:这次比赛可以提供虚拟机环境吗?
答:抱歉,本次比赛不提供编程机器。如果只有windows,没有linux环境,建议安装virtualbox+ubuntu参赛
b)关于工程环境
问:是否限制编译选项?
答:作为面向对象的程序员,大赛约定的接口是可执行的程序,编译选项是实现细节,我们看不到也不关心。
问:是否允许并行计算?
答:算法难点不在于并行算法,而且初赛阶段判卷环境限制为单核,想并行也并行不起来。
问:使用Java性能上是否吃亏,会否给时间补偿?
答:1、对于我们这种算法题,并不会用到太多的java特性。一般说java比c++/c慢,是由于一些OO特性、GC等等造成的,而我们这道题并不需要用到OO,也没有太多内存动态申请的地方;
2、只有在算出路径权重一样的情况下,才会考虑使用性能排名,对于复杂的用例来说,不同的算法算出一样权重的概率很小。即使算出权重一样,由于性能吃亏而排名降低,也可能就低了一名,分数也就低了0.x分(如果是1万人参加排名,低一名只会少0.01分)
3、如果要给出补偿的话,找不出一个合适的补偿值,补偿的过高c++/c选手也会不满意的。
问1:demand文件是不是可以同时输入多行,然后程序分别对这多行需求做处理。
问2:如果demand文件多行,输出文件也按多行输出并与之对应?
问3:还有测试数据吗?什么时候放,放多少?
答:1不会多行,程序每次运行都只处理一个测试用例。2不会多行。3有的,今天就会放出一个更复杂点的测试,用例供大家调测使用。
c)关于参赛资格
问:有的学校未被邀请参赛,但是学生想参加怎么办?
答:正在添加相关的学校,您可以先做做题,报名晚几天也没影响的。
----------------------------------------------------------------------------------------------------------------------------------
大赛邮箱:codecraft@huawei.com
大赛网址:http://codecraft.huawei.com
----------------------------------------------------------------------------------------------------------------------------------
这里链接一个很早就写出程序的玩家(不一定是对的,请自行思量):
http://blog.csdn.net/lwtdzh999/article/details/50804713
----------------------------------------------------------------------------------------------------------------------------------
自己也绑了条大腿.....
----------------------------------------------------------------------------------------------------------------------------------
参考资源:
【1】http://bbs.csdn.net/topics/391911624?page=1
【2】大赛网址:http://codecraft.huawei.com
【3】CSDN论坛,http://bbs.csdn.net/forums/hwcodecraft
相关文章推荐
- js判断是手机访问还是电脑访问
- UIView之动画效果的实现方法(合集)
- Saiku如何固定查询结果table的表头和首列
- 线程与进程的区别
- andorid动态布局
- wifi基本原理
- bzoj 3505: [Cqoi2014]数三角形
- unix环境高级编程-文件IO
- vs2010的调试功能
- ahjesus Axure RP 7.0注册码
- Newtonsoft.Json高级用法
- 类似ios滑动开关
- 使用注解来构造IoC容器
- android获得屏幕宽高和控件宽高
- [LeetCode]328. Odd Even Linked List
- NMON监控linux性能
- 集合常见问题
- zend studio输出中文乱码的问题
- ClassNotFoundException和NoClassDefFoundError的区别
- IDEA编译tomcat-redis-session-manager出的错误