4.28的宣讲会圆满结束(就在写这段话以前不久),对于西邮Linux兴趣小组这一次纳新,身为局外人表示:仍是有历史,仍是会玩,仍是厉害哈。html
华丽的分割线里面是本身以前的攻关战略,最后补充了宣讲会上学长的解释,属于本身的攻关过程以外,但值得记录。linux
如下攻关内容叙述角度模拟一我的单独挑战时的思考,实则我是在各类指点下与学长共同完成的。。ios
所以,感谢帮个人学长,还有下方评论区的伙伴@奥尔德赛,对于技术,咱们永远是朋友。小程序
FREE OPEN SHAREide
-------------------------------------------------------------------本身的攻关经历分割线(START)-----------------------------------------------------------------------ui
4月伊始,西邮Linux小组为五月纳新进入了前期宣传阶段,免试题一放出,引来各个热爱技术的同窗热情挑战。
免试题入门可从西邮Linux小组官网中戳入,或直接点西邮Linux小组2016免试题进入。编码
本想着从百度进入免试题入口,却意外发现2013年曾有外校学生写过13年的免试题攻略,对小组免试题考察风格有了初步的了解。详见西邮Linux小组2013免试题+继续之战。spa
首页如图所示,看见START,就马上戳了进去。
进去后是一张背景图片,中间写着2006的年份(西邮Linux兴趣小组2006年创建),点击后变成2007,再点击变成2008……到2015年后点击会从新跳到2006。那线索说不定在这里,若是能点出今年——2016,或许会有所发现。
打开源代码,在有关2015的源码下发现<input type="hidden">
隐藏域,value值为2006,所以点击2015后会从新回到2006的界面,而2006的界面源码隐藏域value的值为2007……
看来要出现2016的字样,就须要传递2016的value值,在任意年份的页面中将源码中隐藏域value改为2016后提交看看:翻译
<input type="hidden" name="year" value="2006"></input>
修改后点击年份,不出所料,成功过关!3d
P.S:点击START以前的页面源码中也有相同隐藏域且value=2006,点击START以后跳到2006的界面中,更加证实了第一关须要出现的2016和该<input>
有关。
而在START页面将value直接修改为2016后点击START会怎么样?结果直接到了第二关!
一段名言、一副梵高做的《星空图》和背景的弹琴声是进入第二关首先注意到的三大线索。再没有其它什么显示的,那么应该还须要到源码里面看看。
分析源码,发现名言、图片以外,背景音乐所用的<audio>
标签多了一个,应该不会平白出现的,如图,没怎么接触过音频文件,不知道是.3gpp格式和.eop格式哪一个是多余的。
复制该连接,所有下载出来,发现.3gpp就是背景音乐能够直接播放,而.eop没有相关软件能够打开。
百度 .eop格式 发现这须要拿键盘钢琴软件Everyone Piano打开,下载并打开之。
果真,这个源码中没用到的.eop文件用Everyone Piano打开后在键盘中敲出了线索————一个网址:
www.dreamchasinger.cn/movie/ !
跟着琴声来到第三关,一部还看不懂的微电影和一串01码,对于01码,[西邮Linux兴趣小组2013年免试题](http://www.cnblogs.com/ma6174/archive/2013/05/04/3058889.html)第一关不就是这个01码么?老套路试试。
怪不得纳新群以前有人说K炸,我还水了一句王炸。原来是他早已经打到这一关了,好可怕。
乱提交了一些发现并没有用,源码里也毫无破绽,目瞪口呆之际盯着K玩,发现了一个神奇的现象——除了第三张方片国王是褐色胡子的中年人外,剩余三个国王都是白胡子老头!难道有猫腻,下载第三个图片之。
下载出来后据说有一种叫“图种”的制做技术,能够将rar压缩文件和一张图片合并起来显示为一张图。那这张图或许就是用图种制做器作出来的——把这张图片名字3.png改成3.rar发现正是一个压缩文件~
如上图所示,压缩文件里面放着1.txt,拉出来名称改为1.exe后发现……是一个贪吃蛇游戏!过关再说。
一闪一闪的速成贪吃蛇游戏终于熬到了第四关,果真出现了IMPORTANT MESSAGE:VHUUEFUDIXQHU
WHAT??!返回王炸的网页,在输入框输下VHUUEFUDIXQHU后竟然仍是没反应,那你还IMPORTANT!
好吧,确定有出路的,不过我暂时就卡在了这里……
-------------------------------------------------------------------本身的攻关经历分割线(END)-----------------------------------------------------------------------
-------------------------------------------------------------------评论区(START)-----------------------------------------------------------------------------------
评论区伙伴说该输入FREEOPENSHARE,果真到了第5.1关,也是能够从网址直接跳的。
本身的第一反应仍是看源码,发现这是用HTML5的Canvas画布编写,因为本身从HTML+CSS直接跳至PHP服务端开发,以前没怎么深刻了解过JavaScript,有些吃力。
但好歹如今也学C,而且JS也是面向对象的脚本语言,根据变量名仍是能读出一些寓意的,如图所注释:
然而这时离宣讲会开始只剩一小时了,来不及思考了,要开车。
-------------------------------------------------------------------评论区(END)-------------------------------------------------------------------------------------
-------------------------------------------------------------------看完宣讲会官方攻略后的补充(START)--------------------------------------------------------------
官方详解以下,和本身的这篇博客相比的话各有优势哦:
其中,第五大关解题源码以下:
#include <iostream> #include <cstring> #include <math.h> #include <cstdio> using namespace std; const int N = 25; int dp[N][N][N][N]; int a[N][N]; int fa[2][N*N] = {}; char ans[2][100]; char str[10000]; int main() { cin>>str; int len = strlen(str); int row, col; row = col = 0; int num = 0; //将方格数据转化为矩阵 for(int i=0; i<len; i++) { if(str[i] >= '0' && str[i] <= '9') { num = num * 10 + str[i] - '0'; } else if(i > 0 && str[i-1] >= '0' && str[i-1] <= '9') { if(str[i] == ']') { a[row][col] = num; num = 0; if(str[i+1] != ']') { col++; row = 0; } } else if(str[i] == ',') { a[row][col] = num; row++; num = 0; } } } int n = col; //动态规划 for(int i=1; i<=row; i++) for(int j=1; j<=col; j++) for(int k=1; k<=row; k++) for(int l=1; l<=col; l++) { int mx = 0; if(mx < dp[i-1][j][k-1][l]) { mx = dp[i-1][j][k-1][l]; } if(mx < dp[i-1][j][k][l-1]) { mx = dp[i-1][j][k][l-1]; } if(mx < dp[i][j-1][k-1][l]) { mx = dp[i][j-1][k-1][l]; } if(mx < dp[i][j-1][k][l-1]) { mx = dp[i][j-1][k][l-1]; } if(i == k && j == l) dp[i][j][k][l] = mx + a[i][j]; else dp[i][j][k][l] = mx + a[i][j] + a[k][l]; } cout<<"the ans = "<<dp[row][col][row][col]<<endl; //逆推获得路径 int cnt = 0; int i=row, j=col, k=row, l=col; while(1) { if(i == 1 && j == 1 && k == 1 && l == 1) break; dp[i][j][k][l] -= a[i][j]; if(i != k || j != l) dp[i][j][k][l] -= a[k][l]; if(dp[i][j][k][l] == dp[i-1][j][k-1][l]) { ans[0][cnt] = 'U'; ans[1][cnt] = 'D'; cnt++; i--;k--; } else if(dp[i][j][k][l] == dp[i-1][j][k][l-1]) { ans[0][cnt] = 'U'; ans[1][cnt] = 'R'; cnt++; i--;l--; } else if(dp[i][j][k][l] == dp[i][j-1][k-1][l]) { ans[0][cnt] = 'L'; ans[1][cnt] = 'D'; cnt++; j--;k--; } else { ans[0][cnt] = 'L'; ans[1][cnt] = 'R'; cnt++; j--;l--; } } //输出路径 cout<<"load_one > "; for(int i=0; i<cnt; i++) cout<<ans[0][i]<<" > "; cout<<"end"<<endl; cout<<"load_two > "; for(int i=cnt-1; i>=0; i--) cout<<ans[1][i]<<" > "; cout<<"end"<<endl; return 0; }
-------------------------------------------------------------------看完宣讲会官方攻略后的补充(END)-----------------------------------------------------------------