首页
社区
课程
招聘
使用
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 21:27
0
[原创]腾讯2010竞赛第三阶段题目思路+代码
我的想象力比较丰富,我把这段代码想象成被VM掉了
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 20:58
0
[原创]腾讯2010竞赛第三阶段题目思路+代码
1,大家都知道这个是赌博题,大家的答案都不是完美的,只是缺陷不一样而已
2,代码发出来是以技术交流为目的的,难道大家喜欢某数字公司的竞赛,src也归主办方所有?
3,如果觉得代码有用,就学习一下,如果觉得没用,shift+del删除即可
4,如果觉得自己的答案也很不错,可以发出来,让大家学习一下
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 20:51
0
[原创]腾讯2010竞赛第三阶段题目思路+代码
你的f1是kernel32.dll里面的还是tmp.dll里面的?
如果是tmp.dll里面我是获取不到的
如果是kernel32.dll,你先把kernel32.dll卸载掉,然后在load进来?
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 20:24
0
[原创]腾讯2010竞赛第三阶段题目思路+代码
1,2 算我题目理解错了吧
1,我理解成测试程序只有一个bin,所以两个文件,要释放tmp.dll dll.dll,这样,我的程序是无法事先获取f1的地址,没有这个api地址,走的是SearchAll流程

3,你写一个试一试呢?
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 18:45
0
[原创]腾讯2010竞赛第三阶段题目思路+代码
1,非系统的dll一样可以检测,不信,你可以试试,api获取失败,会进入SearchAll的状态,每次都去尝试搜索第一个api的
2,多线程懒得搞了
3,题目说明里面写了, 都是由exe主程序调用的
4,这个机制问题,没法解决
5,再大也可以处理,除非程序本身运行就会超时

我只赌了2点,1,单线程,2,不检查单步

多线程可以解决的,只是懒得弄了,我觉得,测试用例有多线程会更复杂,时间误差更大(线程切换是需要时间的)
单步无法解决,所以不解决了
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 17:26
0
[成绩][第三阶段成绩]
竞赛应该以技术交流为目的,见比赛结束,tx还没动作,我先把代码放出来吧

http://bbs.pediy.com/showthread.php?p=891994
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 15:52
0
[成绩][第三阶段成绩]
我把我的程序,和我测试的结果发上来给大家看看

testlbr.exe和提交的答案,仅仅是打印信息的格式从两行变成了1行
1.txt,是我在一台xp机器上面,每个样本跑了20遍的结果
2.txt,是我在我自己电脑上跑A0.exe,跑了20遍的结果(我的电脑是win7系统,a1-a4本身就不能执行)

大家再对比一下评委里面我测试程序的结果,看看误差有多可怕吧

把附件解压到同一目录,运行test.bat > test.txt 来获得结果
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 15:16
0
[成绩][第三阶段成绩]
对啊,那你来设计一套计量方法避免误差啊。。。

假设误差是15ms,如果成绩是16ms和21ms,你认为误差可以忽略吗?
假设误差是15ms,如果成绩是1016ms和1030ms,你认为误差可以忽略吗?
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 15:00
0
[成绩][第三阶段成绩]
当误差时间和实际时间几乎差不多的情况下,增加测试次数是无法避免的

这里只能改进计量方法,那你来设计一套避免误差的计量方法,让评委重新测试一次?
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 14:16
0
[成绩][第三阶段成绩]
a0 a1 a2增加1000ms是为了避免误差给结果带来的不公平

20楼的代码已经很明显说明了,GetTickCount计算时间在很短的时候,是不精确的,有误差的
48楼的兄弟说了评委在测试方法上面所带来的误差

所以,在程序本身运行时间很短的情况下,这些误差是不能忽略的
加1000ms,这些误差基本上可以忽略,让结果相对公平些
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-19 11:00
0
[成绩][第三阶段成绩]
1,实不相瞒,我就是用Debug方式做的,没有Hook 进程的一行代码
2,你可以解释一下20楼的现象
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-18 12:02
0
[成绩][第三阶段成绩]
加时间是公平的,减小了选手之间的分数差距,同时兼顾了做对的条数
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-18 11:49
0
[成绩][第三阶段成绩]
完全可以,建议用ns级别来计算时间
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-18 11:45
0
[成绩][第三阶段成绩]
赌博题其实无所谓,我的答案,兼容性相当好,只有极少的anti能灭掉
重新制定规则,重新出样本,我还是这份答案,但是输在GetTickCount的精度上面,我觉得很不公平
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-18 11:40
0
[成绩][第三阶段成绩]
是的,规则必须统一
我也赞成重新制定规则,大家重做
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-18 11:28
0
[成绩][第三阶段成绩]
加10000ms的话,后面两个也要加上9000ms

后两个减1000ms是不公平的,理由我前面说了,GetTickCount是不精确的,小于20ms的都不是其真实时间

看下面的code

#include <windows.h>
#include <stdio.h>

int main()
{
	DWORD t = GetTickCount();
	Sleep(1);
	DWORD t1 = GetTickCount();

	printf("time: %d\n", t1 - t);
	return 0;
}


我这里运行,有时候是15,有时候是0,精确吗?
再看下面的code

#include <windows.h>
#include <stdio.h>

int main()
{
	DWORD t = GetTickCount();
	Sleep(1000);
	DWORD t1 = GetTickCount();

	printf("time: %d\n", t1 - t);
	return 0;
}


我这里运行,每次都是998,精确度比上面高多了
再看下面的code

#include <windows.h>
#include <stdio.h>

int main()
{
	DWORD t = GetTickCount();
	Sleep(10000);
	DWORD t1 = GetTickCount();

	printf("time: %d\n", t1 - t);
	return 0;
}


每次都是10000
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-18 10:31
0
[成绩][第三阶段成绩]
我给评委一个简单建议:将前3条,每人的时间都加1000ms,然后重新算分

理由很简单,GetTickCount精度不够,加上与最后2条的Sleep(1000); 统一
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-18 10:10
0
[成绩][第三阶段成绩]
我对评分标准有些质疑

看A1成绩,16ms和21ms相差5ms,分数相差5分
看A3成绩,1094ms和1130ms相差36ms,分数却相差0.64分

也许你会说A3的基数大了,但是我想说的是,A3题目里面有个Sleep(1000),这个完全不是我们程序所消耗的时间,能把这个因素算作基数里面吗?

另外,我的A1自测情况,有时候是16ms,有时候是8ms,用GetTickCount计算时间,在30ms以下都是不精确的,能否将这两个分数拉出一倍的差距吗?

极端例子请看这个帖子的A1:
http://bbs.pediy.com/showpost.php?p=890231&postcount=25

请看第4名和第5名,第4名做对5条,而第5名只做对3条,分数却只相差2分,仔细研究会发现,是前两条测试用例,相差了52ms所导致的,这个公平吗?

这题基本属于猜题类型的,个人觉得,不应该完全用时间来评分
雪    币: 7327
活跃值: (3813)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-11-15 14:47
0
[测试程序][第三阶段题目测试程序]
不给力啊,一行代码可以拿80分

printf("GetCurrentProcessId\n");
精华数
RANk
7327
雪币
3813
活跃值
关注数
粉丝数
0
课程经验
0
学习收益
0
学习时长
基本信息
活跃值  活跃值:活跃值
  在线值:
  浏览人数:632
  最近活跃:2025-1-9 16:30
  注册时间:2004-04-26
勋章
能力值

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册