主题:第44次编程比赛结果~~~
孤独的猫 [专家分:3370] 发布于 2006-10-18 13:13:00
首先非常抱歉的是这次题目出得非常的不好:
1、环境的不好,包括定下的gcc编译器,和unsigned long long范围,大部分朋友非常不适应,其实原来的两题的范围都是极大的,远远超过unsigned long long的范围,但这又需要大家处理巨型数的加减乘除和取余运算,比较麻烦,所以定下了整形的最大范围。
2、题目本身的不好,这次题目出得没有什么难度,不涉及很深的数据结构等知识,本意是希望能吸引更多的人参加,希望只要认真学过基础C/C++的都能写出来,但在细节方面则有很多讲究,"都能写出来"实现了,"细节讲究方面",没有实现。事前评估严重不到位。
不过大家辛辛苦苦写出来的程序还是要测试的:)
下面是测试的一下说明:
1、原来指定使用GCC编译器的,但是绝大部分选择了vc,所以最后的编译器选择了,vc2003
2、很多人的程序都不符合测试标准,我对不符合测试标准的进行了一些改动,具体如下:
(1)声明的更改,如果你程序里没有使用任何64位整形变量,则将unsigned long,改为unsigned __int64,如果你程序里有使用64为整形变量,只将这些变量声明改为unsigned __int64,如果你程序里没有使用上述的变量,那么我则将程序里所有整形变量的声明全部改为unsigned __int64而不会考虑需不需要更改
(2)相关函数的更改,如果你的程序里用到需要区分32位或64为变量的函数时,则更改为64位的函数
(3)很多朋友没有按照要求用程序接受参数,进行处理,而使用了标准输入输出,同意改为接受参数形式,第一题参数转数字的函数同意用_atoi64()
以下朋友程序格式完全符合要求,向他们表示感谢:
wlsss willzhanglala 独行者 liren0 scanf
有关标准程序:
这些题目都是我自己想出来的,所以没找到什么现成的标准程序,由于一开始考虑到的范围是非常巨大的,所以我用python写了个程序用作测试,因为python的长整型的范围几乎无限,并且精度到个位,所以我在这就不发出来了
下面开始测试:
第一题:
1:参数为20亿,程序结果都正确
在速度上,tenm,xylgg和flypampas的程序耗时在60ms左右,其他人都在40ms左右
2:参数为:1922337203685477580
答案:111011000101201111200020011001120020000102002002
结果:heibird,scanf答案错误,kofox,tenm,xylgg,wshong,flypampas超时
第一题:独行者,hotzenlotz,ITER,liren0,wlsss,难分上下
但取极限值2^64-1时
结果:100110120101002020101011001001110201202012011120101
得出正确答案的仅wlsss
第二题测试:
1、参数:accbac
答案:1573/5040 197/630
flypampas,xylgg答案出错
当字符串在除了首尾的其他地方出现a时,flypampas的结果会出错
速度测试基本一样
(又测试几组数据,算法基本正确)
当测试到参数:abbcabcacbcabacaca时,tenm第二次提交的程序
唯一得出了正确答案:3051461327/13332664800 67132149299/293318625600
答案没有超出范围,但其他朋友的程序在处理数据的时候超出了范围,tenm这点处理的最好
综合以上两题,wlsss没有解答第二题,tenm第二题略占优势,但第一题实现的有问题
所以我认为,冠军应该是:[color=FF0000]hotzenlotz[/color]
他两题实现的都还不错,请准备下次比赛
[color=0000FF]由于题目出的很不到位,所以冠军的选出比较困难,再次抱歉~~~[/color]
回复列表 (共15个回复)
沙发
hotzenplotz [专家分:40] 发布于 2006-10-18 07:07:00
倒.
谢谢猫哥的夸讲.
这次比赛题目确实简单,
直接按题目的题意顺着往下做就行了,不需要动脑子.
再加上各位高手都没参与.[em1]
比赛的结果并不重要,只是希望大家能学到一些东西.
既然轮到我出题,那就出有点难度的,希望各位给个面子,捧个场.
题会尽快出,以便大家有时间准备.
板凳
xylgg [专家分:800] 发布于 2006-10-18 10:37:00
谢谢猫兄,想不到我这个菜鸟,第一次参加比赛也能够在评论时被提名,很了不起了,以后还要多加油啊,希望以后能够写出更好的代码!也希望我们的网站越办越好
3 楼
孤独的猫 [专家分:3370] 发布于 2006-10-18 10:46:00
to hotzenplotz:呵呵,好好出题啊~~
to xylgg:一起加油:)~
4 楼
独行者 [专家分:1280] 发布于 2006-10-18 12:13:00
原来这还算简单的?看来我得努力了。
5 楼
xieyong456 [专家分:2620] 发布于 2006-10-18 12:40:00
确定简单 呵呵这句话打倒我们新手一片啊,努力努力
我这种垃圾的代码也拿出来忽悠,自己都感到惭愧,让猫哥见笑了,添麻烦了,哈哈
不懂unsigned long 更没接触到_int64是什么东东,main(int argc, char **argv)也不熟悉,彻底完蛋..好了,言归正传
我看了heibird,scanf的代码和hotzenlotz的代码
heibird,scanf都是以2*F[i]为基准展开,如果大于就输出2,小于而且大与F[i]就输出1否则输出0
hotzenlotz的代码其实也是以2*F[i]为基准,只是在减的过程中如果碰到2就要多++一次,比如36的话,36-17>17就要++变成2,说到底思路是不尽相同的
但是为什么在1922337203685477580这个数据测试的时候heibird,scanf会出现错误的答案!!
6 楼
hotzenplotz [专家分:40] 发布于 2006-10-18 14:05:00
to xieyong456:
汗一个,连我名字也打错了,不过我也把确实打成确定了。
水平差不要紧,我也不会写main(int argc, char **argv),不过看了别人的程序就会了。
scanf的程序我看了一下,算法没错的话就是细节错了,找到这个Bug。
unsigned __int64 F[52]={... 0x6e923dd1,0x1af14fe3,0x28474dd97, .......}
其中0x1af14fe3似乎应该是0x10af14fe3。这个数字以后的数应该也都错了
而heibird则吃亏在了
int main(int argc, char *argv[])
{
__int64 inputdata = strtol(argv[1],NULL,10);
............
}
上,strtol()函数的返回值为long型。
7 楼
kofox [专家分:80] 发布于 2006-10-18 16:26:00
我也说说感受把,比赛听激烈的,也很有意思,下次一定还要参加。
看到题目后想法有了,这么大的数据我用tc是处理不了了。
星期天去了卖碟的地方找了好多vc++,c++builder。还去书店借了书,后悔上学时候都没这么勤奋。
c++ 还不太会用,cout 就研究了好久。后来还是用tc实现的,测试数据就试验了168,0,1,2。只是最后交答卷时候把long 该为了 unsigned long long ,给搂主添麻烦了。
8 楼
孤独的猫 [专家分:3370] 发布于 2006-10-18 17:21:00
To kofox:
cout不熟,可以用printf嘛,呵呵~~~!~
9 楼
wshong [专家分:1880] 发布于 2006-10-18 18:20:00
我的大数是不行的~唉~
10 楼
wshong [专家分:1880] 发布于 2006-10-18 18:37:00
unsigned __int64 F[52]={0,0x1,0x3,0x7,0x11,0x29,0x63,0xef,0x241,0x571,0xd23,0x1fb7,0x4c91,0xb8d9,0x1be43,0x4355f,0xa2901,0x188761,0x3b37c3,0x8ef6e7,0x1592591,0x3414209,0x7dba9a3,0x12f8954f,0x2dccd441,0x6e923dd1,0x1af14fe3,0x28474dd97,0x613db0b11,0xeac2af3b9,0x236c30f283,0x55848cd8bf,0xce754aa401,0x1f26f2220c1,0x4b3538ee583,0xb59163febc7,0x1b65800ebd11,0x4224165d65e9,0x9fadacc988e3,0x1817f6ff077af,0x3a2ac8caa7841,0x8c6d889456831,0x15305d9f3548a3,0x332793c7aff977,0x7b7f852e953b91,0x12a269e24da7099,0x2cfccc1784a1cc3,0x6c9c021156eaa1f,0x10634d03a3277101,0x27905a285bbd8c21,0x5f8401545aa28943,0xe6985cd111029ea7};
像scanf兄这些东东是什么意思?我没有接触过这方面的知识,请教了!谢谢
我来回复