关于模拟题的一些弱鸡总结

首先要感谢某位不知名大佬(当时没关注博客事后找不到了。。。)给了我很大的启发,然后本弱鸡在此写一下关于模拟题的一些个人见解(大佬求轻踩_(:з」∠)_)。

众所周知,模拟题在ACM比赛中主要属于签到或铜牌层次的题,银牌模拟题并不多见。模拟题考点主要在思路,代码能力以及细节应对能力,而这几项在银牌题中大多由构造题来考查。构造题就是另一种东西了,构造题比模拟题费脑子多了我这个弱鸡就不掺和了。

模拟题的考点分析下发现其实就一个——细节。因为考虑下什么是所谓的代码能力?打比赛的队伍肯定有一个写代码能力最强的代码手,各队之间的代码手的能力或许有差距,但其实都远超过了模拟题的要求了。无非就是有的大佬STL用的更NB一点,但ACM模拟题涉及到的东西都是大家都会的,没听说过什么模拟题是必须要会某个STL才能过的。这里的代码能力其实说的是写代码的习惯问题。写过项目的肯定都明白,写的时候宁可多一倍工作量也要把代码写的粗浅简约,注释绝对不会少加,否则一旦出BUG基本上就等着重写吧(因为重写比DEBUG快多了)。当然,我不是说比赛时代码要写的跟项目一样,毕竟比赛差一秒可能就是两种牌了,但根据个人能力适度调整写代码的规范程度绝对是有帮助的,尤其是对于模拟题来说。至于思路就更明显了,模拟题的思路其实就是“如何去实现”,思路的第一步是先确定一个可行的宏观的做法,但大多模拟题的做法都有很多,这就衍生了第二步——优化思路,使你的思路更容易实现,这也是我这篇总结的主要内容。到这里我们可以发现其实更优的思路和更强的代码能力所产生的好处就是使你需要考虑的细节更少。这也是很多人不明白为啥一道题这么多隐藏细节需要考虑大佬却总是能在几分钟就写完还一发AC,一方面是大佬见多识广啊,其次很多时候大佬的方法或者方法实现与我们不一样,根本不会产生那些问题或者可以规避掉这些坑点。

模拟题虽然多种多样没有模板可以一篇概全,但也不是无迹可寻,程序是服务于需求这一主旨在模拟题上体现的最是淋漓尽致。很多模拟题的背景以及要求都是我们生活中遇到过的功能,甚至“模拟四个人打麻将”这种功能我们也能在麻将游戏中用到。因此模拟题其实有很多类似的可以划分为一类,进而根据分类可以总结出针对的模板思路,以下就是我个人总结的一点思路。

1:单词型。

这一类模拟题的要求是对一些一段一段的被分隔符分开的字符串进行处理。典型的就是给你篇文章让你对其中的句子或单词进行各种处理,这种的分割符往往是空格,逗号和句号。有时候给你的是整个长串,这种你往往可以通过选定某个字符为分隔符或者手动添加来进行分割。这类题的思路一般是先把“单词”提取出来,然后按照题目要求进行处理,最后再按照要求拼接回去。因为这类题中可处理的目标一般就两种——单词和分隔符,而提取和合并的过程都不容易出错,对单对象处理也不容易出错,所以这样写可以减少很多逻辑和代码的细节错误。

例题:Gym - 101190A Abbreviation

2:多单位型。

这一类模拟题背景往往是许多单位(不一定是人)在某些规则下进行活动,要求往往是输出最后或者中间某阶段的各单位状态或活动结果。典型的就是几个人在一起玩游戏,告诉你初始状态让你模拟出最后谁赢了。这种题的思路一般是把每个单位都独立化每个单位都是独立的个体,每个单位相关的数据都用一个单独的结构体或者数组保存,每个单位的行动也要独立考虑。然后根据题目的背景我们可以建立各单位间的影响关系,这时候要考虑的一般主要是两点——当前单位进行行动会对哪些单位产生影响,有哪些单位会影响当前行动的单位。简单一点的题中各单位对各单位的影响都是对称的,稍难一点的题中各单位对各单位的影响往往是不对称的甚至是会变化的。

例题:2018ICPC北京网络赛C题 Cheat

3:数据结构 and STL型。

这一类模拟题背景和功能描述往往非常接近某种数据结构或者STL。这种题的思路一般是我们在对应的数据结构或者STL的基础上再去修改往往更加简单明了。

例题:HihoCoder - 1383 北京赛区(2016)网络赛——The Book List

4:其他。

如果是要求比较简单明显的模拟题大家肯定都会,如果遇到有些感觉很复杂难以理清关系的模拟题,那么可以尝试直接暴力实现。典型的就是涉及某种语言的程序的运行,出题人肯定不会指望每个出题人都是能开发一种语言的巨巨,这种时候我们直接暴力实现加上暴力判断往往就能过。

例题:2018青岛ICPC网络赛C题 Halting Problem

本人一弱鸡,不敢说什么做遍模拟题,模拟题有很多,这上面只是我个人见的模拟题中比较多的几类,有其他类的靠大佬们来总结了。

(最后高喊:萝莉百合赛高~!♪(^∇^*))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值