浅谈乱搞+暴力

人生第一次浅谈算法。都看liuzibujian大佬日常浅谈
第一次浅谈就写这些算法。其实都是应试上的技巧,所以在AC和正确算法这种事情这里就不会提及了


暴力

先说最基本的暴力。

这个世界上只有两种算啊,暴力和优化暴力。最出名的优化暴力就是分块和莫队。

分块思想

其实最常用的就是一般的分块。当然还有整除分块,一个在静态情况下,如果需要修改其实也是可以支持的但确实比较麻烦orz

整除分块这个事情还是看beautiful_cxw的博客

其实就是乱搞+数学变形,但是其实,无中生有的玄学优化。

莫队是基于分块的一种优化暴力,针对离线算法。能够接近 O ( n n ) O(n\sqrt n) O(nn )的解决区间类型的问题。

当然有些数据出出来会卡线性排序的莫队,所以改变莫队的排序方式就能够很好的解决这些问题(保持左端点块顺序,右端点改变方式)

之前的大佬说个,人是活的,数据是死的,出题人是懒的,有些数据要用你不会的数据结构来搞,乱搞莫队大概能够搞过很多数据吧orz

其实除了莫队这样子的乱搞暴力学优化,还有一些玄学操作

剪枝

比如剪枝就分可行性剪枝,最优性剪枝等等,这些在搜索当中非常常用,最极限的就是洛谷的小木棍加强版,把剪枝发挥到极限

搜索还有一种A* 搜索,但不巧我水平较低,真的不会,只是听说过…但A* 的随机化玄学搜索能够优化时间。是个很不错的算法。

hash

然后对于字符串的暴力,由于字符串难的题真的非常建模(后缀数组还不会的孩子请面壁),一些题目就干脆直接暴力hash,这个世界上大概还真的没有hash解决不了的字符串题,如果有,就用双hash,联赛范围内大概还没有能够卡掉双hash的数据(出题人非常的懒,但双hash很有可能会TLE)。

打表

暴力不知道包不包括打表,有些题还真的是打表题,NOIP有真言“打表出省一”不是瞎吹的,打表找规律是OIer们对数据本身的敏感程度的考验orz,而且对你推不出的一些数论规律,打表显然要节省很多时间。

有时候可以优化一些暴力来搞一搞,大力出奇迹嘛。

然后能够优化的时间空间一定要保证打对的情况下使劲优化(你说快读快写没用?),滚动数组啥的都要掏出来。


乱搞

先声明,乱搞不是瞎搞,是有针对性的时间(空间)的非正确性或者局部正确的玄学优化

随机

随机的其实还有很多乱搞操作。也有很多高端算法用的就是随机(比如Miller-Robin),在实战dfs的时候就有一种BOGO算法复杂度是 O ( 玄 学 ) O(玄学) O(),大致意思自己百度猴子算法,类似于猴子定理吧…然后在随机取模的时候优化一下对于一些范围较小的数据就可以卡过了。

包括在图论当中的SPFA队列当中的随机取点(当然如果出现这样子的情况就会用到dijstra)。

然后在随机当中非常常用的就是卡时输出,这个有些情况下还真的贼有用!卡时怎么搞就去百度一下…

然后有些dp神优化的题大概也能够利用玄学随机找出最优(局部)转移状态来乱搞。(但估计没什么卵用)

dp贪心

显然,dp贪心是错的,但是有些数据你在找不到正确解法或者很难优化(你不会斜率/四边形不等式/单调队列),然而数据非常大, O ( n 2 ) O(n^2) O(n2)的算法显然过不了,那么对于大数据就可以用贪心来解决骗分,小数据还是用正解。贪心是在保证已有分数的基础上瞎搞的结果。

分类讨论

这个其实比较常用,也不能算是真的乱搞,但是是保证乱搞的分数是增长的必备技能。小数据暴力就可以过那为什么不用暴力,大数据就交给乱搞嘛!当然如果分类过多就有可能出现内存不足的情况(内部开内存真的比较…orz)

玄学二分查找

其实这个和模拟退火比较像,但是其实不需要像模拟退火这样子有个随机的点,只需要缩小二分范围,默认最优解在当前二分范围(有可能不在这个范围内)内并且保持单峰(有可能不是单峰,双峰或者平底锅,那你可以打个三分啥的乱搞,提高可能),就可以二分判断正确性了orz

分解质因数

这个其实比较骚的,因为在数论里大部分算法都是基于唯一质数分解定理的,而且分解质因数真的很好打,这个随便乱搞其实能够解决很多正确算法的中档数据。然后会发现有的数特别大不知道是不是素数(欧拉筛不出来),那就当他是大素数就可以了嘛!管他呢!

假设既定成立结论

这个是没有办法的办法。有些题(比如一些二元组的题或者序列的题),你真的想不出正解,那就猜这个结论,然后举反例来hack。如果你想出一个可能正确你举不出反例又找不到证明方式的那就照着打吧(还是针对你没有把握的那一档数据,小的保留暴力),说不定就蒙对了或者骗到分了。

STL

这个东西就比较有意思了。vector玄学暴力开数组,能开多大开多大,能骗点分骗点分,queue和priority_queue这种就要用得好了。bitset暴力压缩。只要CCF的评测集不是特别慢(如果开O2那就无所谓了),大概还是能够水一把过去的。

(欢迎随时补充!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值