主题:第41次编程比赛主打题结果
kirby1985 同学的程序不能通过编译,希望下次提交代码前先在自己的机器上运行起来
第一轮, 测试数据用的是题目中给出的数据
str1 = "abcdefg"
str2 = "xadzfcy"
有下面三位同学给出了错误答案,其他人都安全通过
boxertony 1
hotzenplotz 2
孤独的猫 1
后面几轮的测试数据用下面的程序生成, rickone同学的建议和我得想法基本一致
通过改变两个参数SEED和LENGTH来控制生成不同的测试数据
char* str1;
char* str2;
#define LENGTH 29999
#define SEED 4
void genString(char* p, int len)
{
for (int i=0; i<len; i++)
p[i] = (rand() % 26) + 'a';
p[len] = 0;
}
void Init(void)
{
srand(SEED);
str1 = new char[LENGTH+1];
str2 = new char[LENGTH+1];
genString(str1, LENGTH);
genString(str2, LENGTH);
}
第二轮
seed=0; length=10, 正确答案应该是1
下面同学的程序给出错误答案, 其他所有同学顺利过关
WinWing 2
qantas18 5
sllone 2
其中WinWing错的有点可惜,数组下标差了1个位置,希望下次比赛能给自己多设计一些测试用例,这样的错误不难发现
第三轮
seed=1; length=100, 正确答案是28
下面三个程序倒在了这一轮
magicalking 2
willzhanglala(1) 32
willzhanglala(1) 32
现在剩下的就只剩下rickon和argentmoon两位同学了
第四轮,两个程序都给出正确答案,但是rickon稍快
seed=2; length=10000
rickone 1.60
argentmoon 1.75
第五轮,继续正确, rickone的速度优势更明显一些
seed=3; length=20000
rickone 6.2
argentmoon 7.0
第六轮,基本重复前两轮的结果
seed=4; length=29999
rickone 14.0
argentmoon 15.6
看到这里相信大多数人都和我一样,觉得冠军已经毫无悬念,
但是我还有最后一组数据
str1 = "\0"; str2 = "\0"
rickone -842150656
argentmoon 0
很惊讶吧, rickone犯了一个很低级的错误
memset(b,0,n+1);
应该是 memset(b, 0, (n+1)*sizeof(int));
本来这组数据我是想用来测第一轮的,但是担心杀伤力太大,想想还是留到后面吧,在测这组数据之前,我还担心可能会做无用功的,没想到就是它决定了最后的冠军归属
现在我宣布第41次编程比赛的冠军是argentmoon同学!!!
这次比赛的参赛同学不是很多,正确率也不高,可能是我给的时间不大好,下次我一定会改进
这道题目只要能识别出动态规划,实现起来非常简单,代码量也很小,如果没能看出来是动态规划,作起来就比较困难了.
这次我给了大家一个相互challenge的机会,但是没有人有效的利用,非常可惜.argentmoon应该能从中学到一些, 万一我没有想到最后那一组数据,比赛结果就完全不同了.
口水题的结果我明天再公布

您所在位置:



