免责声明:这篇文章只是拿来娱乐大众的.首先博主不保证在比赛中使用汇编一定可行,因为测试环境与正式的比赛环境仍存在差异.其次,根据现行NOI系列比赛规定,使用汇编属于作弊行为.请保证您是阅读完上面两句话后才开始看这篇文章,如造成任何后果,由读者自行承担责任.
山东的选手们都知道,SDOI一直是WinXP+Cena的评测环境
这导致了一下一些问题:
1.Cena的编译器古老,时常出现奇怪的CE
2.WinXP系统栈奇小无比,无法承受一些如链剖DFS序,Tarjan之类的题目
3.Cene对动态内存十分的不资瓷,大量使用指针+动态内存的形式可能会导致TLE和各种崩溃.
真正困扰绝大部分选手的是2.想一想链剖时候还需要写手工栈就觉得恶心无比.
虽然今年我们通知了出题人,让他建议山东省组织单位在评测时加入开栈命令,但是仅仅是建议而已,并且没有得到任何回复.
前两天,Claris老司机告诉我,CCF其实并没有完全禁止汇编语言在比赛中的应用.
关于这个问题的实例可以看我的学长zky在去年CTSC考场上的测试:
闷声作大死系列
也就是说,在中国的各种OI比赛中,其实内嵌汇编是可以偷偷使用的!
那么问题就来了,汇编开栈这个命令是不是可以在SDOI中使用呢?
由于我校的机房电脑都是WinXP,我们也太弱不会用Lemon只会用Cena,所以可以很方便的做一个小测试来检测这个Trick.
我写了一个dfs一条长10^6的链的代码,并去掉了我的Cena里除了-o以外的所有编译指令(这样就是全真模拟SDOI真正的评测环境).
然后写了一份如下的代码(其中使用了汇编来开栈):
下面我们进行测试.
首先我将汇编的三行语句注释掉了.
本地执行当然会直接RE掉.
放到Cena上评测亦然.
去掉注释:
扔进Cena评测:
仍然可以AC!
事实证明:Cena!完!全!没!有!办!法!检!测!内!嵌!汇!编!,内嵌汇编是可以在SDOI使用的!!!
也就是说,只要背过了那三行开栈命令,并在每道需要开栈的题目的主函数开头加上这三行语句,山东选手就不需要再费力去写手工栈了!
这必定是山东选手的福音!未来的山东选手再也不需要写手工栈了!
我在省选前一天突然发现这个问题,赶紧补了一份博客出来通知大家来造福群众,不要问我是谁,我的名字叫雷锋.