浅谈提答题

我对遗传算法的理解:https://www.cnblogs.com/AKMer/p/9479890.html

我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html

我对爬山算法的理解:https://www.cnblogs.com/AKMer/p/9555215.html

\(OI\)中有三种题型,一种是传统题,就是我们参加\(NOIP\)写的那种题。然后还有交互题和提答题,这些都是省选或者\(NOI\)级别的题目。今天我们就来聊聊提答题。

何为提答题?字面意思,就是要你提交答案的题目。现在的\(OJ\)中我知道的能做提答题的只有洛谷和\(UOJ\)(想要练习提答题可以去这两个\(OJ\))。提答题一般会给你一些\(data.in\),然后给你一个\(checker\)(就是你的系统下可运行的可执行文件,小几率会给源码)。然后你需要写一个代码去按照题意跑那些\(data.in\)来造\(data.out\)。并且用\(checker\)来检测\(data.out\)的正确性。\(checker\)怎么用一般都会告诉你。所以你只需要把\(data.out\)搞出来就行了。

一般提答题都是些贼灵性的题目……在传统题里从未见过的操作都会有,所以碰到提答题不要慌,做好心理准备开始灵性乱搞。

乱搞一般分为一下几步:

1、人类智慧

数据规模小的data.in可以直接用草稿纸和笔推出来。

2、暴力

由于时间较长,你可以写一个暴力去爆搞,反正\(5h\),能跑几分是几分。

3、暴力优化

也许在时间的压力下,你可以将你的暴力继续优化以拿到更多的分数。

4、正解

4、近似算法

这个时候,遗传算法,爬山算发和模拟退火等近似算法就很有用了。你可以写一个批处理(如果是\(ubuntu\)就写\(.sh\)来用这种近似算法跑提答题。第一遍下来把正确的\(data.out\)全部移走,然后再跑剩下来的。如此反复这般,就很可能在短时间内拿到很客观的分数了。这种方式比上面\(3\)种都要快很多,但是缺点是你要对电脑进行操作,而不能像打暴力那样一边挂着一边写其它题。

来吧,到了比血统的时候了!

当然,也有一些提答题考的是平常算法的功力,此处就不多说了。毕竟平常算法更是\(OI\)中的重头戏嘛。

posted @ 2018-09-06 19:27  AKMer  阅读(527)  评论(0编辑  收藏  举报