你的位置:首页 > 软件开发 > ASP.net > [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

[C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

发布时间:2015-03-15 00:00:30
前言  做过杭电、浙大或是北大等ACM题库的人一定对“刷题”不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到“Online Exercise”下 ...

 

前言

  做过杭电、浙大或是北大等ACM题库的人一定对“刷题”不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到“Online Exercise”下的“Problem Archive”,然后从众多题目中选择一个进行读题、构思、编程、然后提交、最后查看题解状态,如果AC了表示这一题被攻克了,否则就要重做了~一般情况下,“刷题”要求精神高度集中且经验丰富,否则很难成功AC,有时候甚至做一题要浪费半天的时间!(有时网速卡了,比抢火车票还要急!)

  楼主在这里先给广大辛勤“刷题”的ACMer赔个不是,因为本文所介绍的AC自动机其实是利用爬虫从网上搜索题目答案,然后再利用C#的web控件和鼠标、键盘事件来自动提交题目的投机式机器人(纯属楼主自娱自乐,多多见谅!)。

注:下图依次是①主页面;②题目列表页面;③题目页面;④提交代码页面;⑤提交结果查看页面

[C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ  [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ  [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ  [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

成果

  参看杭电OJ的RankList(http://acm.hdu.edu.cn/ranklist.php),目前我用这个AC自动机粗略的刷一遍整个题库共提交12391次,解决2688个题目,正确率21.69%,总排名第8。同时我还发现至少2个和我属于同一类的考机器人刷题的“捣蛋鬼”,其中一个是排名第2到第7的三国蜀国的将领们,另一个是几乎占据17~28名的hdujudge0~n。为什么能发现他们?哈哈,①没人会连续几天不停的刷题的;②总提交数高的离谱;③正确率低的吓人;④我在浙大OJ上也遇到了他们(哈哈哈)。在此,我想邀请二位合伙做一个自动爬题+自动分析代码的题库解析的网站,也算是我们利用自己捣蛋的玩具做的一点好事~嘿嘿~(此外,我非常佩服排名第一的那位,如果是人刷的其毅力和能力绝对一流;如果是机器刷的,能达到53.80%的正确率也是非常高明的爬虫!)

[C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

业务流程与状态转换机

  其业务流程主要是模拟人在浏览器里的操作过程,从登陆到搜索,从搜索再到提交,从提交再到获取提交状态,如果AC了就转到下一题,如果没有AC就进行第二次尝试(每道题目进行10次尝试),如果中间出现异常就直接进行下一次尝试,来保证程序顺利进行。其整个过程通过下面四个状态变量来控制。状态转换正常情况下发生在webBrowser1_DocumentCompleted以及timer1_Tick事件中,其中前一个事件是每次web文档加载完毕时响应,后一个事件是每隔一定时间响应,此外当代码提取和状态提取的web文档解析get='_blank'>线程中如果发生异常,也会触发状态转变。

 1 /// <summary> 2 /// 0初始状态;1填写用户名和密码状态;2输入找到的代码;3查看是否AC; 3 /// </summary> 4 static int input_state = 0; 5 /// <summary> 6 /// 0初始状态;1移动鼠标聚焦name和password输入;2移动鼠标聚焦code输入 7 /// </summary> 8 int mouse_state = 0; 9 /// <summary>10 /// 0初始页面;1登陆页面;2提交代码页面;3查看AC页面11 /// </summary>12 int page_state = 0;13 /// <summary>14 /// 0初始情况;1已搜索链接;2代码解析中;3代码解析完毕15 /// </summary>16 /// <summary>17 /// 0:初始状态;1:Queuing状态;2:Accepted状态;3:错误状态18 /// </summary>19 private static int AC_state = 0;

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:[C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录