2011阿里巴巴程序设计公开赛 总结来源: 胡浩的日志

暑假开始,lcy老师叫我准备出套题,我盘算着在退役之前来场华丽的专场,想也没想就答应了
不过一个人出题压力真大啊....难易程度,各种题型,都要把握好.关键是还没有基友可以一起验题..
idea是早就想好了几道,但是题是等到Astar回来之后才开始出的...10天之内搞定一场比赛...那几天我整个人都思密达掉了
由于个人喜欢玩游戏,所以出了场以游戏为背景的游戏专场..希望各位玩的开心
还好在比赛前夕赶出来,由于人手不是很多,比赛的时候还是出现了一点小瑕疵,不够圆满不够华丽啊..

以下是比赛的日记

00:02:50 [gao]庄俊元 姜凯 范雨喆 第一个提交,并且拿到first blood,3分钟不到时间,这简直就是一个奇迹!
00:03:00 有人开始用java的A-B交1003...掉进了我的陷阱...题目就说I'll play a trick on you嘛
00:05:10 [TakeItEasy]仲立华 李非凡 吴建华 拿到了1003的FB,仰慕
00:12:05 [Turnip]王安刚 曹博晓 拿下了1009的first blood,至此,设置的三道给FB的题目被A光了
00:12:05 [bupt1]戴振阳 章明星 何川 同时拿下1009的FB...好巧

00:16:37 [xenocide]杨忠程 拿下1002的FB,至此,简单题被A光

截止比赛开始三十分钟,收到22份email反馈1003问我要100RMB的...不好意思,都不在我给RMB的范围之内

00:41:39 [u_u]何钊 林添 熊南君 A光了四道简单题,进入中等题环节
00:58:00 [bupt1]戴振阳 章明星 何川 竟然在一个小时之内A掉了那道dancing links.Orz

好悲剧,看了他的程序后发现是错误的代码,由于测题时候数据范围改小了,数据变弱被水过了.急忙加数据,但是比赛时候修改有失公平,只能赛后再修改了

01:27:52 [latsyrc]刘宸亨 刘家辉 谭瑞阳 以和标称一样的方法AC了1004
01:36:41 [WhyWhy]洪金艺 叶灵 吴王宇 直接奔中等题,成功抢下FB

由于被误导,大家选题的方向可能搞错了,都去看1007...1005明显是很裸的广搜啊(我定义为中等偏简单的)..现在已经4题的队伍已经陷入没题做的状态了

03:02:10 [BIT-Bear]范敬凡 杨晓萌 蒋一泽 过了1010,网络流,正解啊~~稍稍打破的僵局
03:22:01 [HZXJHS]高欣 李超 莫成娴 用随机算法搞定了1007,仰慕
03:33:30 [LeGenDN]叶寥亮 陈凯伦 喻展 用纯dfs加剪枝过了1007,仰慕
03:39:43 [LeGenDN]叶寥亮 陈凯伦 喻展 终于达到了7题.
04:06:31 [latsyrc]刘宸亨 刘家辉 谭瑞阳 神一般的过了超级模拟题三国杀...这刘氏双兄弟我在百度的时候就觉得他们特别帅
04:06:54 [HDU02]张勇威 周尧 白欣 终于有人用和标称一样的方法过了1007,我泪牛满面啊..
04:26:42 [latsyrc]刘宸亨 刘家辉 谭瑞阳 八题,太霸气了
04:28:01 [latsyrc]刘宸亨 刘家辉 谭瑞阳 奇迹啊奇迹...设计最难的两道压轴题都被广东帅小伙轻松搞定..整场比赛已经提前决出冠军,剩下的问题就是能不能AK了..
05:00:00 比赛圆满结束

截止比赛结束,共受到60多封邮件反馈1003信息,有些比较靠谱,也是我出题的疏忽,我会挑选第一个靠谱的邮件给予小安慰^_^

正常比赛除了1007数据水了,真正做出来的其实只有5个左右.其他方面还是蛮不错的..

所有题都有人A,冠军不AK这两项基本原则在[latsyrc]刘宸亨 刘家辉 谭瑞阳的努力下做到了

以下是解题报告

1001 Coin Game

类型:博弈/想法题(简单)

假设我们有10枚硬币,K=2,第一个玩家拿走一枚之后,第二个玩家在圆的对称点拿走相应的,保持剩下的两边硬币相等,这样不管第一个玩家怎么取,第二个玩家只要在另一边一样的取法就能保证自己是最后一个取硬币的.也可以根据SG定理知道,SG值一样的两个游戏为必败状态.

推广到更大的情况也一样,所以第一个玩家胜利的情况只可能是N为奇数且K为1,或者K>=N,

其他情况均第二个玩家胜.

当然你也可以用sg定理去推出初始状态的必胜必败情况,从而得到规律.不过比较费时间且没有上述推论直观.

1002 Fruit Ninja

类型:几何(简单)

假设有一条线穿过一些水果,那么我们将这条线平移,使之与一水果的一个点相交,然后按这个点进行旋转,又可以使之与另一水果的一个点相交.这次这条线还是穿过这些水果.

所以,我们可以枚举两两水果的点做直线,然后计算该线穿过水果的个数

数据规模很小,随意随便搞.复杂度O(n^3*k^3).

1003 I'll play a trick on you

类型:非主流(简单)

呵呵,本题的名字就是我会和你开个小玩笑.

第一眼看到这题,很容易得到99-72=27这样的结论,并且?=15的时候,36-21=15和28-15=13都是成立的,估计会有很多人看到此处就会提交A-B,而且范围里给了1<=B<=A<= 10100 ,很容易让人用大数提交.

但是,最后一个7却不符合21-13=7的规律,所以....提交A-B是AC不了的.

其实真相就是9+9+7+2=27,4+5+2+7=18....而?=12. 6组数据全部说的通

只需要把所有数字加加起来就好了.

其实A和B数据范围这么大已经给了很大提示了,就禁止大家往很复杂的方面想,什么素数啊什么的.

作为非主流题,如果有人能算出?并且和给出和官方不一样的解释,那就悲剧了,所以Hint里加了句如果能有更牛逼的解法但AC不了,我本人给以小安慰一下

1004 Level up

类型:数据结构-线段树(中等)

题意很简单,成段更新,成段询问,但是更新却和一般的线段树大不一样,每个点虽然接收到相同的信息,但是由于本身不同,最终得到的值也是不同的.用一般的延迟操作就搞不定了.

突破点在K,范围很小,只有10,可以考虑每次有人升级的时候,就递归的找下去,将这个人进行升级操作.由于找到某个人只需要logn的复杂度,每个人最多升k次,所以n个人的复杂度是O(nklogn)

用了两个辅助数组add[maxn]和MAX[maxk][maxn],add用于记录延迟标记,MAX[k]表示该区间等级为k的最大经验值.初始化add,MAX[1]为0,其他为-1,表示无人在这个等级.当MAX[k]的值大于等于Needk时,就对这个区间进行升级操作,和线段树操作一样递归的将这个区间能升级的人全部升级.

单次操作可能会是nlogn(每个人都升级),但是平均下来还是只有nklogn.

1005 March

类型:搜索(中等偏简单)

理解题意搞清楚优先级后,然后简单的搜过去就好.提几个注意点:

1.奇数行和偶数行的6个方向行走坐标变化是不一样的.

2.就算你当前只剩0.25MPs,你也可以走任意一格,这样会你消耗光你这回合剩下的MPs

3.敌人优先级最高.在ZOCs间走消耗所有MPs

4.然后是路

5.然后是河流

6.最后才考虑前进格子的地形

7.为了避免不必要的错误,数据已经保证了这边有河流,对应的那格也有河流

1006 SanguoSHA

类型:模拟+状态DP(难)

如果没玩过三国杀的话这题简直做这题就是天方夜谭了,就像国外那种巨长模拟题一样,规则巨复杂,不过我给没玩过三国杀的人看过题目,还是能看明白的,就是累了点.

1-3主要是介绍三国杀的一般规则,玩过的童鞋扫一遍就ok了,4和5才是题目重点,标记规则和攻击规则,需要仔细阅读

dp的状态是[round:80][state_nj:5][state_all:3^6];

round表示回合数,8个人*10论

state_nj:表示内奸状态,0:未知身份,1:被认为忠臣,2:被认为反贼,3:被认为内奸,4:死

State_all:表示除主公内奸的其他角色状态,0未知身份,1身份被标记,2死亡

(由于大家都按常规出牌,反贼和忠诚不会被标记成其他角色)

然后就是安步就班的模拟下去.

建议写个函数,标注a攻击b之后状态的变化情况,然后无论谁攻击谁都调用这个函数就简单方便很多

这种模拟题还是多分成小块来写的好,容易差错

标称写了16个函数

1007 Street Fighter

类型:dancing links(中等)

很直观的最小支配集问题,用dancing links的重复覆盖很好解决.

但是由于每个角色只能选一次,即一个角色只能选一个模式.所以这又是精确覆盖.

一共有sigma(Mi)+N列,sigma(Mi)列在搜索时需要重复覆盖,另外的N列表示角色的选择,需要精确覆盖.最后只要判断覆盖了sigma(Mi)列就ok了.

需要再模板上改好一些内容,任何一小点都很容易导致死循环.

1008 Tower Defence

类型:插头DP(难)

题目要求放W使得路线最长,我们反过来理解,就可以找一条最长的路(边不重合),然后在这路的边上放满W就ok了.(或者其他所有的格子都放W)

为了保证这条路径边不重合,我们不仅需要记录轮廓线上方的插头状态,还需要记录上方的路的状态.比如:如果当前格上方有路,但是上方没有插头,这样这格就不能建任何路了,因为在这格建的路不能和上方的路连起来,必然导致边的重合.

由于S和T都不固定,需要有独立插头,括号表示法的话会比较难写.建议用最小表示法来标记插头

1009 Board Game Dice

类型:数学(简单)

就是等比公式化简一下.高中数学.概率学的好的童鞋应该一眼就能看出答案.

最后的答案是Mx*x/N.

1010 World of Warcraft

类型:NP(无解)

我错了,大家原谅........T_T

以下是原来错误的方法

出题的时候很怕这题被按结束时间优先的方式贪心过去,但是贪心没办法处理开始时间和结束
时间都相同的指令的安排,我特地造了几组数据卡这种贪心.不知道实际比赛中有木有大神能
用更犀利的贪心贪过去.
正解是网络流,建一个包含源汇六层的模型.
第一层:源点(1)
第二层:指令(100)
第三层:快捷键按时间拆点(104*100)
第四层:按键按时间拆点(29*100)
第五层:按时间拆点(没有实际意义,只是控制每秒只能按K 个键)(100)
第六层:汇点(1)
共计13502 个点
这六层分析出来了相信建图就不用我多说了吧?

但是.....第三层到第四层没办法保证同时按键...所以,悲剧了...最简单的反例就是

1 1

1 2 1 Alt + A

引以为戒引以为戒

恭喜

[latsyrc]刘宸亨 刘家辉 谭瑞阳  拿到了冠军

[bnuteam09]龚治 易超 马飞龙 拿到了亚军

[u_u]何钊 林添 熊南君拿到季军

[HZXJHS]高欣 李超 莫成娴  拿到殿军

[gao]庄俊元 姜凯 范雨喆 拿下1001FB

[xenocide]杨忠程 拿下1002FB

[TakeItEasy]仲立华 李非凡 吴建华拿下1003FB

[latsyrc]刘宸亨 刘家辉 谭瑞阳 拿下1004FB

[WhyWhy]洪金艺 叶灵 吴王宇 拿下1005FB

[latsyrc]刘宸亨 刘家辉 谭瑞阳 拿下1006FB

[bupt1]戴振阳 章明星 何川 拿下1007FB

[latsyrc]刘宸亨 刘家辉 谭瑞阳 拿下1008FB

[Turnip]王安刚 曹博晓 和 [bupt1]戴振阳 章明星 何川同时拿下1009FB

[BIT-Bear]范敬凡 杨晓萌 蒋一泽 拿下1010FB

最后.要感谢pkkj对的题目的诸多修改及验题
感谢Lost,和他共度一个良宵写出了SanguoSHA这神一般的描述
感谢陈锐对我题目描述的最后审查
以及小丽和甘露对题目的改进
还有lcy老师给我的支持与信任.Astar回来后我还没开些写题他都一直没催过我
....

2011 阿里巴巴程序公开赛相关推荐

  1. 2011阿里巴巴程序设计公开赛 总结(by胡浩)

    2011阿里巴巴程序设计公开赛 总结2011-08-18 16:58 | (分类:默认分类) 暑假开始,lcy老师叫我准备出套题,我盘算着在退役之前来场华丽的专场,想也没想就答应了 不过一个人出题压力 ...

  2. 2011阿里巴巴程序设计公开赛 / 1002 Fruit Ninja

    某神的代码: #include<stdio.h> #define max(x,y) (x)>(y)?(x):(y) #define min(x,y) (x)<(y)?(x):( ...

  3. 一个阿里巴巴程序员的心路历程

    来源:创业家 作者:@放翁_文初 淘宝开放平台技术产品负责人 10月13日,关于淘宝开放平台技术部分的分享看到有些同学留言说有这样的机会和环境是幸运的,的确在阿里这些年赶上了公司的发展,赶上了互联网技 ...

  4. 2011阿里巴巴集团实习生招聘笔试题 CC++

    答案为自己整理的,欢迎批评指正. 公共题 选择题(每题5分) 1. 若一棵二叉树具有10个度为2的结点,则该二叉树的度为0的结点个数是(      ) A:9    B:11     C:12     ...

  5. 惊险17分钟,这个阿里巴巴程序媛机智化解全局性重大故障

    出品|阿里巴巴新零售淘系技术部 01   紧急!全局性重大故障   急促的电话报警铃声响起,生生撕裂了会议室里专注的空气. "快!出问题了!" "入口的流量已经跌零了!& ...

  6. 5. 阿里巴巴程序员开发手册黄山版

    学习的动力不止于此: 最近阅读了刘典武大神推荐的阿里巴巴Java开发手册泰山版.里面的很多规范不仅仅适用于Java.非常值得我们一起学习. 于是,我找了最新的版本–黄山版. 正所谓,五岳归来不看山,黄 ...

  7. easyexcel工具类_阿里巴巴程序员常用的 15 款开发者工具

    从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展. 阿里巴巴将自身在各类业务场景下的技术积淀,通过开源.云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具, ...

  8. 第九期: 阿里巴巴程序员常用的15款开发者工具

    阿里巴巴将自身在各类业务场景下的技术积淀,通过开源.云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率.更优雅的写代码. 从人工到自动化,从重复到创新, ...

  9. 阿里巴巴程序员常用的 15 款开发者工具

    从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展. 阿里巴巴将自身在各类业务场景下的技术积淀,通过开源.云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具, ...

最新文章

  1. p2v、v2v 转换-windows篇
  2. [CES 2018] 联想公布全球首款Daydream一体机,第二季度或将发售
  3. 苹果应用开发架构及项目结构
  4. gerrit上sshkey设置问题
  5. C语言删除链表的算法(附完整源码)
  6. 错误ORA-04091: table is mutating, trigger/function may not see it的原因以及解决办法
  7. Linux学习笔记02
  8. php获取当前操作系统类型 PHP_OS
  9. catia如何整列加工_CATIA V5 R20加工模块的自动编程方法
  10. c/c++面试试题(二)
  11. Android网络课程笔记-----完善GoogleStyleApp框架结构
  12. 天勤数据结构代码——树基本操作
  13. How to extract datafiles from asm diskgroup?
  14. 汇编语言指令系统——控制转移类指令
  15. Python实现两个有序集合的交集和并集
  16. 安装软件,python安装,node.js安装,pycharm安装,vscode安装,PR, PS, LR.AE Windows开关机等,雪崩的时候没有一片雪花儿是无辜的
  17. 创造与魔法java语言_创造与魔法基础魔法大全 超实用基础魔法推荐
  18. 最优灵活体系结构(Optimal Flexible Architecture,OFA)
  19. 使用基于phython的OpenCV库imwrite()保存tiff格式图像
  20. 简化行政地图边界 简化地图边界的方法 GeoPandas

热门文章

  1. git 基本配置和使用
  2. android 呼吸灯动画,更加自然的渐变——呼吸动画
  3. Python写一个迷宫小游戏
  4. 护士站之sqlite
  5. 王者荣耀s16服务器维护,王者荣耀维护s16新赛季开启 王者荣耀更新不了怎么办...
  6. ACE:高级CIP评估
  7. 源码搭建Lump环境
  8. 地质雷达物理测量RADAN®7软件(Radan 7.6.19.11260)最新下载
  9. 专科生逆袭成博士赴斯坦福深造,他是怎么做到的?
  10. 带孩子们做环球旅行的读后感_高三期间家长们怎么做有益于孩子的学习 - 淘学网...