2010-ZZULI-暑假集训选拔赛(二)解题报告

http://202.196.6.170/JudgeOnline/showcontest?contest_id=1040

第一题 翻转数求和 (1级)
上次校赛出过类似的题目,很简单。
大多数用的是字符串处理,挺麻烦的,不过最终AC掉挺强的啊。
不用字符串就可以简单AC的,想想啊。

 

第二题 根据关键字进行字符串拷贝 (2级)
字符串问题,可以使用strncmp()函数实现。另外注意key为“NULL”时和复制失败时(即关键字在原串的开端)输出为“NULL”。
大家容易出错的一点是当原串中不包含该关键字是,目的串是原串。

 

第三题 4 Values whose Sum is 0 (3级)
这题实现方法要用二分,这个不好想到,如果想到了,你实在很幸运。
先将前两列数组和后两列数组分别两两合并求和,形成两个大小为n*n的数组,将第二个数组排序后。对于第一个数组中的每个元素求其相反数并在第二个数组中进行二分查找,找到几次就算几次,问题便可解决。

 

第四题 找“鞍点”(1级)
也很简单,找到二维数组上的一个元素,它在该行上最大,在该列上最小。
这道题刚开始题目出错,逗号用成了中文标点,而我们学校OJ不识别汉字。结果致使许多牛牛们卡在这里,很抱歉啊。
其实很水啊,呵呵。

 

第五题 素数回文 (2级)
根据HDU1431改动,原题的(5 <= a < b <= 100,000,000)改为(5 <= a < b <= 8,000,000),比原题目简单了,用素数打表的方法即可实现。
看来大家的素数打表掌握的不错啊,基本上都把这题给AC了。

 

第六题 人类基因功能 (3级)
这一题是动态规划,不难发现这题是一个LCS(最长公共子序列)模型的变种。
题目叙述较长,关键要抓住要点,注意有效信息的筛选。
状态转移方程:
F[i,j] =Max{F[i,j-1]+w('-',s[j]),F[i-1,j]+w(s[i],'-'),F[i-1,j-1]+w(s[i],s[j])},这个DP的时间复杂度是 O(len1*len2)。
这题还要把字母匹配得分表保存下来,如上式中的int w(char a,char b)函数。

posted @ 2010-07-10 16:23  孟起  阅读(387)  评论(0编辑  收藏  举报