社区讨论

几个NOIP的作弊思路

学术版参与者 12已保存回复 37

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
37 条
当前快照
1 份
快照标识符
@mi6uepxq
此快照首次捕获于
2025/11/20 10:59
4 个月前
此快照最后确认于
2025/11/20 16:41
4 个月前
查看原帖
1.打表
很多时候,我们的算法会超时。有时数据只有很少的输入,数据跨度较小,甚至没有输入(当然这种题)这时可以另建CPP文件,模拟暴力遍历所有的输入可能,用慢算法算出结果,对目标程序写入答案数组或ifelse语句,强行打标出答案。至于没有输入的就更好办了,我不信我的程序慢到几个小时都算不完(NOIP有3小时考试时间)。
另:如果时间不允许,可以选择跳着数据打标,虽然不能保满分,但是基本的得分还是可能的。也可以算出自己的算法最多能容纳多大的数据,加if语句:如果数据低于这个值直接计算,否则按照打表的结果计算。当然只打超时数据的表!也可以两种混着用(跳数据+选择性打表)。
注:如果有两道题超时,可以同时用两个CPP文件打表(Linux也可以同时运行程序,省时间)。如果还是打不完表———到此为止,应该也能通过个别数据。手动补上剩下的程序(如main的return 0和下大括号等)。
2.数据源文件搜索
【警告】本方法为猜想,慎用!先在OJ和Lemon上试试!
遍历本地所有文件,一旦发现数据则读取其中数据,改写目标源程序(目前我想到的平均结果是错一道题)。 用第一个评测的程序作为盗取数据的程序,然后改写其他所有题的源程序,如果你第一题会写,正好把第一题的正解也输出了,再修改其他题目的源程序。通常评测机的文件不是很多,并不怎么耗时。但保险起见,先算好时间限制内所能遍历的最多文件,添加计数器,如果超出这个范围,立即结束遍历,写结尾(如main的return 0和下大括号等)。
不建议使用这种方法,除非你只会做一两道题(并且题目总数较多),否则很可能因为越权访问或没时间遍历文件而得不偿失,甚至根本找不到源文件(这种情况在普通评测软件上不会发生,如Lemon等)。只要一道题你会写,首选打表+其他做法,不要选用这种做法!!!
注:如果是Online Judge,写个SQL注入盗数据可能也行。本方法未经亲测,请在模拟环境下评测,并回复评测结果,本人缺乏模拟环境,所以只好拜托各位dalao了!
3.常数优化(略)

回复

37 条回复,欢迎继续交流。

正在加载回复...