自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

???

???

  • 博客(41)
  • 收藏
  • 关注

原创 【破烂集】垃圾场里捡废品的各种研究 前言

oj是一个神奇的东西,我发现有一些事情并不仅仅是算法那么简单,看看poj就知道了,你千辛万苦写的一个代码时间的零头可能还不如最快代码的时间,所以优化是一个很重要的东西,同样的算法,不同的优化可以相差极大,这也是渐渐我们需要面对的一个问题,这个也是破烂集的一个初衷,不断学习并且同化自己的代码,从而进化,在代码的垃圾场当中检出有用的东西为我所用,这也算是一个研究并集结精华的任务吧。当然我也不是什么都懂...

2018-05-25 13:00:42 343

原创 【xdoj难题集】前言

开这个主要目的是造福后人,有时候求索是非常费时而浪费的,之前做poj,看到丰富的discuss以及网上的大量讲解,让我有了这个打算。xdoj作为一个不错的题库,缺少一些对难题系统的讲解和提示,以至于这些题甚至变成了无人问津的深巷,这里面一方面是思想的问题,另一方面是一些细节的问题,所以这两方面我都会照顾到。另外推荐一位聚聚的博客https://www.cnblogs.com/zhurb/p/725...

2018-04-08 23:22:44 2051 2

原创 【破烂集】大佬的bit

walker杜老师他们队 的bit,感觉非常实用,因为不但十分简洁,而且很方便大量构造,其他线段树也值得一试。struct bit{ int d[MAX_N]; void fix(int x , int s){ for( ; x <= N ; x += x & -x) d[x] += s; } int qry(int x) { int s = 0 ;...

2018-09-11 20:01:20 212

原创 【破烂集】神奇的优化

之前沉迷于研究各种优化,看了很多网上关于常数优化的文章,突然豁然开朗,发现很多之前都没有想到过的细节,看了文章有理有据的论证之后,我发现原来有那么多可以改进的地方(举个例子,在xdoj如果开了O3优化可以快近一倍,这个O3优化可以视为把所有细节做到极致)我也进行了一些测试,现在就让我将我发现的地方一一说明。1++i代替i++ 看了文章,说i++需要另外存储之前的值,所以会比++i慢一些,所以...

2018-09-04 15:09:38 285

原创 【破烂集】used类型的快速初始化

有的时候如果要多次进行类似bfs这种活动的时候,需要多次初始化used数组,这个时候常规的做法是memset,但是其实这个可以o1进行,从而更快,做法如下int used[MAX_N];int col;初始化这样一个类似染色的数组,每次要进行bfs时让col++这样到时候判断used数组是否和col大小一致即可,显然这个方法可以做的次数是1e9+,所以没有任何问题。...

2018-08-29 22:51:25 229

原创 【破烂集】大佬的spfa

估计所有人在看过spfa之后基本都会把其他最短路的算法忘光把,因为spfa不但超级简单,而且还超级块,所以的确非常好用,之前看到一个大佬的spfa,感觉有几个不错的优化,用了之后把我1202的一个85ms左右的算法直接优化到65ms了,还是很给力的,所以在这里贴一下,主要在于用deque代替queue,并且在push的时候通过对于这个d的大小的一个模糊的判断决定放到前面还是放到后面(queue做不...

2018-08-22 20:43:46 243

原创 【破烂集】 几个技巧(长期更新)

最近沉迷邪术,在看了很多牛客大佬的代码之后发现自己的修为还远远不够。原来2的逆元可以这么求ll inv2 = mod - mod / 2;输入数组竟然可以这么输 for(int i = 0; i < n; i++) scanf("%d", a + i);这个取模也可以 for (int i = 0; i < n; i++) ...

2018-08-16 18:40:02 217

原创 【破烂集】 一种大佬的计算逆元的简便方式

这个代码很像1到n逆元的打表过程,证明就不写了,可以理解为是进行了一个extgcd,复杂度也一样(都是辗转取模),但是看到更清楚,代码也更简便,既不需要复杂的extgcd,也不用写快速幂,值得拥有。int inv(int x) { return x == 1 ? 1 : 1LL * inv(Mod % x) * (Mod - Mod / x) % Mod;}...

2018-08-15 18:20:52 284

原创 【填坑/xdoj难题集】xdoj 2018校赛 现场赛 I(xdoj1297) Tr0y And His Startup

又是一个坑,之前的文章里也说过是因为不知道为什么会得到个样例从而弃坑的,现在看来原来是不知道分数取模,真的有点惨,除去这点之后这道题的思路基本和我当时想的一模一样,维护一个能够查询区间和区间平方和的线段树,然后进行一些小计算即可,鉴于我比较懒,所以直接从网上抄了一个自认为不错的,然后复刻封装了一下,之后又犯了一些低级错误debug了一阵,从而解决了这个问题。 简单说说题目,求每次攻击后的流量期望...

2018-08-14 10:24:50 297

原创 【xdoj难题集】1228 敬老师的手环1

题目链接也算是一道所谓的毒瘤题了吧,不过其实如果知道polya的话并不是很难,这道题计算不旋转的种类数其实不是很难,但是如何解决旋转的去重就需要技术了,也就是polya,如果不太清楚的可以自行查阅挑战程序设计的高级篇数学部分的最后polya定理,那个模板非常不错(算是挑战里不错能用的了,不过也可以优化,详细见后面的代码),基本上就是直接套用模板就可以了。再说说前面算种类数的问题,2的确是比3简...

2018-08-12 19:10:50 382 1

原创 【填坑/xdoj难题集】xdoj 2018校赛 现场赛 H敬老师的手环2

这道题应该算是那次校赛时最难的一道题了吧,是唯一一道没人做出来的题目,不过,在经历了这么多题海的洗礼之后,我发现其实这道题并不是那么的难,也是套路。先说说当时的悲惨经历,看到之后认为就是一道简单的状压dp,所以写了一个矩阵快速幂,结果发现对不上答案,仔细一想才发现有无数重复的情况,并且这些重复和手环的最小循环节有关,这样我一下子就不知所措了,我在之前的文章里也写到过可能是有一种比较高明的方法去重,...

2018-08-12 19:01:19 771

原创 【破烂集】stl邪术——rope

之前做一道要用到splay的问题,因为并不会splay(同时懒得学习),所以就试图在论坛找找有没有偷懒的办法,没想到真的让我找到了,那就是rope这个结构,这个东西听说比较新,所以如果特别老的oj(比如poj和hdu)我觉得可能悬,不过dev(前提是新版的,不是机房那种)和牛客这些应该都可以支持。这个东西非常的方便,这里先留下一个坑(有兴趣的可以自己去查一查,相当于速成splay),之后研究了之后...

2018-08-12 18:47:22 941

原创 【破烂集】大佬的一个技巧——bitset优化

之前大佬的题解里面用到了这个优化,还是比较实用的,特别是在大bool数组中用了这个省空间省时间(比如邻接矩阵用这个会快很多),具体的用法各种博客里面有很多,百度搜索bitset即可,在这里就不赘述,我就说一些我的测试和大佬的比较精髓的代码。 首先这个东西理论上是可以按位进行操作和定义的,所以从空间来说应该应该会节省一些,不过从测试的结果来看,这点只对大数组有效,感觉任何bitset都会至少占用6...

2018-07-31 13:27:54 2678

原创 【破烂集】大佬的封装模板——平面几何

平面几何一直都算是我(可能是每一个人)比较头疼的一个问题,因为用cpp做几何题的一个最大的问题是精度,如果搞不好这个东西,那么很有可能会功亏一篑,所以如何用合理的语言构造一个相对完善的数学体系就变成了这个任务的重中之重,之前那位大佬的题解里面包含了一个功能极其强大,并且比较严谨的集合模板,经过了很长时间的翻译,解释和验算(还真的发现几处大佬的疏漏),这个模板基本被我搞定了,有了这个模板,基本上所有...

2018-07-24 19:02:24 340

原创 【破烂集】大佬的封装模板——输入输出

说实话在看了很多大佬的代码后(不管有没有理解),给人的第一个直观印象就是——他们的代码为什么看着和我们的风格相差那么大,用到了很多很多的类的封装和define,鉴于他们是大佬并且已经身经百战了,所以应该可以认为那些代码可能是包括他们,甚至是他们的前人很多人实战中经验的积累和智慧的结晶,所以我们应该尝试着去思考他们那些代码的好处是什么,我也想了很多,现在看来的确是好处多多。我就随便说几点我看到的,当...

2018-07-24 15:27:45 259

原创 【我又复活了】2018暑假的一些计划

终于熬过了考试月,现在到了继续研究的时间,最近打牛客的多校赛,所有代码竟然都是开放的,所以这让我有了一个绝佳的机会直面最强大佬们的代码,作为一个山寨之王,我怎能不从中吸取精华,为我所用,在我看来任何事情也不是绝对没有捷径可走,站在高手的肩膀上还是可以少走很多弯路,多想到很多可能我们想破脑袋也想不出来的东西,学到一些非常不错的技巧,这个感觉还是很不错的,所以我认为我在这个暑假干的最多的一件事就是去山...

2018-07-24 15:15:06 165

原创 【poj】2996---Help Me with the Game / 2993---Emag eht htiw Em Pleh

题目链接最近开始刷poj了,这道题非常有意思,题意不难,把国际象棋棋盘上的棋子按照顺序输出,之前觉得这道题很麻烦,不过中途突发奇想用了一些打表把代码写的很简单。# include <cstdio># include <algorithm>using namespace std;typedef pair<int , int> P;const ...

2018-06-07 19:41:29 213

原创 【xdoj新手教学】WEEKLY MISSION 5

本来准备了很多poj的专题想做,结果没想到poj最近坏了。。。没办法,就先把这周的题给做了,这周的的确不难,都是比较基本的dp,做着做着就完了。我估计懂的人应该不会有什么难度,不懂的可能会比较费劲,所以就先把这周的题解写了吧。我还是建议看书系统地学习,如果只是从题目里学习某种思想的话,一定要全面地搜索网上的资料,如果只是懂个模板,那你基本和不懂没区别。什么是dp,一种递推的思想,更加高效的...

2018-06-04 20:58:21 251

原创 【xdoj新手教学】WEEKLY MISSION 4

题目链接 给自己挖了一个天坑,终于给填上了,看了很多,写了很多,研究了很多,思考了很多,也感觉收获了很多,感觉很多对于搜索题,甚至是图论题和dp的理解都加深了。这次的题目简介我已经写在了这周的课件中,大家可以参考,所以这里我只稍微写写关于每道题做法的一些具体细节(随便写写)。所有代码都是手写的(有一些参考了某些前辈的经验),相比于最优的差了很多,仅供参考前面几道基本题 A# i...

2018-06-01 15:51:38 357

原创 【破烂集】 排列dfs的一个小发现

优化得还不是太好突然发现一个不错的好方法,可以优化排列组合dfs中的一些困难(比如输出排列),并且在时间上也有所优化,故而一提。对于组合数的问题的确一直是一个难题,而且我做的的确也不好,记得之前在做第三周的E的时候就是因为要输出排列,而我的那个方法简直坑到了极点,所以勉强过关,在发现了这个方法之后,我突然眼前一亮,感觉有了一雪前耻的机会。先说说我一般对组合数搜索处理的思路,第一种是最暴...

2018-05-26 13:27:23 183

原创 【破烂集】 输入问题

说实话这个问题之前一直没有意识到,后来才发现这门学问是如此高深,本着精益求精的态度,有些时间空间的高度优化还是必要的,有时候可能就跟炉石里的伏笔似的,所以即使在做最简单的问题的时候其实也能有一些不错的想法。由于这个问题十分高深,所以我也没有办法绝对说明,也是慢慢研究中的,但我会不断更新,把我所有的研究成果汇总整理到这里,war3里的女巫说过“help me , help you”我想还是有一定道理...

2018-05-25 13:12:12 318 2

原创 【xdoj新手教学】WEEKLY MISSION 3

题目链接这周基本都是搜索题,做的快吐血了,虽然不是非常难,但是精细的问题还是挺多的,还有一些之前很少遇到的tle和mle,听说还有很多人格式错误,算是“五毒俱全”了,所以每道题还是有不少探讨的地方的。A 之前想要搞一些花头,结果每次都wa了,所以最后直接暴力写了一个,倒是通过了,不过有点慢就是了。# include <cstdio>int main(){ c...

2018-05-24 14:14:41 611

原创 【xdoj新手教学】WEEKLY MISSION 2

实话实说,这次的难度要高很多,很多题目都是比赛的原题,虽然很多方法是和上次类似的,但可以说已经进阶了不少。不知道照这样下去,后面的题目会不会已经变成暑训的难度。。。一道一道说一说吧A 小模拟,只要按照题目要求就可以了,没有什么思维。贴代码# include <stdio.h>const int MAX_N = 20;int dx[4] = {1 , 0 ,...

2018-05-16 13:12:18 254

原创 【xdoj难题集】 1167: Furude_Rika and game

一道概率dp题,虽然知道怎么做还是想了一阵,因为每次取的点都是整个平面上的,所以说这个期望只和到底有几行几列被标记有关,所以就可以dp了。之前一直想着怎么正向递推,发现并不正确,于是联想了一下之前网络赛的最后那道题,发现其实是差不多的,因为只要把所有行列都标记的情况视为结束即可从后往前进行递推了,这样问题就迎刃而解了,因为这个值比较小就没有考虑滚动dp,直接用dp[i][j]表示在标记了i行j列时...

2018-05-14 23:37:57 280

原创 【xdoj】1164: 男神的树 以及一些关于内存的问题

这道题不算太难,不过的确给我造成了很大的麻烦。一开始看到的时候,觉得只要一个dfs就可以轻松做出来了,结果没想到真的去尝试的时候才发现一个意外的问题——内存超限,说实话时间超限我已经经历得很多了,但内存超限真的还是没怎么遇到过,所以发现有点手足无措,经过了一些尝试依然没有办法有效解决这个问题,于是我就开始了一些测试。首先看看内存的排布,我们的机子首先要存储最大范围内的元素,因为这道题的n高达1...

2018-05-14 20:49:00 235 1

原创 【xdoj新手教学】WEEKLY MISSION 1

比赛链接前几天一直忙着期(lu)中(shi)没怎么搞acm,正好考完了试把这个小练习给刷一刷(顺便混一片博客),这个题说实话难度有点高,我认为很多内容完全不是0基础的人可以做出来的,鉴于这次acm教学的报名人数之多以及大部分没什么基础的事实,可能最终结果会非常不容乐观,感觉并没有起到启蒙的感觉,会的人不需要启蒙了,而不会的人根本不会。所以结论是,大部分人无需为这次大部分教学题的一脸懵逼而有什么...

2018-05-11 20:21:16 459

原创 【xdoj难题集】1131 A Fib Sequences

题目链接一道很有趣的题,有很多有趣的想法,也是想了很多东西,各种优化之后终于把这题解决了,还是有些东西可写的。说说思路,可以发现如果前面两个数字确定的话,那么这个数列就已经确定了,那么寻找就是一个o(n)的复杂度,因为前两个数字有n方种可能性,所以复杂度在n的三次方,这样会发现直接写是不行的,那么就需要若干的优化,才能解决这个问题。先考虑这个数列到底多大,会发现其实并不会太大,因为斐波那契...

2018-04-29 16:25:41 306

原创 【xdoj难题集】 1059: 英雄联盟

题目链接这道题做了有一阵了,之前一直不知道是什么问题,今天又回头看了看,试了试精度,发现之前的如果末尾是5会无法进位,改完之后就对了。。。精度真的是玄学问题,这个问题一定要重视,还是要积累一些经验。一道模拟题,题目看着很复杂,值的确是有点多,不过仔细读读发现其实要关注的并不多,可以精简为以下几个值。 1物理输出 由于护甲减少的是比例减少,所以被动技能加成也是直接乘以物理输出即可,所以那些...

2018-04-29 14:31:53 293

原创 【xdoj】1159 地铁侠

题目链接一开始觉得有些难度,不过在想到floyd算法之后突然就豁然开朗了,这完全就是那个算法的模板。首先复习一下floyd,我们用dp[i][k][j]表示用到前k个点时ij间的最短距离,这个距离正好就等于min(dp[i][k - 1][j] , dp[i][k - 1][k] + dp[k][k - 1][j]),从而计算可知最短路。这道题就是把前k个数变成了前k个修好的数,所以是一样...

2018-04-29 12:08:39 127

原创 【xdoj难题集】 1018 Josephus环的复仇的复仇

题目链接每天都坚持写写说实话很早就想写这道题了,但是一直不知道怎么解释那个算法,做完之后也看过聚聚的题解,说有一个什么数学结论,然而我研究了这么久都没有研究出什么数学结论,只能再试着看看了。虽然之前已经有了这道题的题解,但我这个做法估计并不是标准做法,而且还是挺快的,所以也就写一写了。第一眼看到这道题的时候还是挺头疼的,看着这么巨大的数字,不知道哪里是突破口,找了一阵发现一个地方不错—...

2018-04-22 23:35:17 450

原创 xdoj 2018校赛 现场赛

发挥不是太好,感觉这次校赛难度挺大的,主要是最后的三道题难度有点高(也可能是自己太菜)。忘了考校赛的题干,所以只能先把前七题写一下,后三题估计要研究一阵,而且每一道都够写一篇文章的了(可能会写在难题集里)。A 这次就连水题都这么难吗?再加上题干输出部分出了问题坑了我一会(我不会告诉你是我英文的九写错了)。贴代码# include <string.h># includ...

2018-04-21 23:12:45 502

原创 【xdoj难题集】 1117 Insert Orz Pandas

很快地想出了一个不是很快的方法,反正很想知道那些3ms的是怎么做出来的。。。只能膜拜了orz看来一眼觉得是状压dp然后就算了一下复杂度,首先因为n最大是10所以没层需要有2的10次方种情况,然后100层,每层最多的情况应该是C10 5也就是250种左右,勉强可以。 然后详细说一下过程,因为n最大是10,而且每个格子最多只能放一只panda,所以每层的熊猫数量为a[i]的情况肯定是CNa[i]...

2018-04-20 11:00:47 214

原创 xdoj 2018校赛 网络赛

2018网络赛(附后三题详解)第一次参加校赛,相比于之前的网络赛,感觉这次难度还行,不算难也不算简单。先简单说说前面几道题吧A 水题,找规律B 水题,最小公倍数C 稍稍有点难度,先排序,仔细考虑即可D 水题,找规律E bfs打表F 矩阵快速幂递推G 找到一一对应的方法bfs好了,仔细说说最后三题吧。H 一道看上去很像dp的题,但实际上并不是dp,首先发...

2018-04-19 19:31:02 266

原创 【xdoj难题集】1116 Dominator Orz Pandas

不知道为什么做的人很少,其实是一道思维题,想通了很简单,另外吐槽一下这道题坑人的m,竟然里面的重要城市可能会重复,这不是存心害人吗?我就不知道谁平常说话说有m个重要城市还能有重复的,当时没看见搞了我20分钟检查,真的坑。并没有什么技术性难题,完全是思想,考虑一个重要城市,假如子树大小为k,那么会发现其实有这个城市相比于没有这个城市只是让答案除k了,为什么呢?因为如果没有这个城市,不管这个城市选什么...

2018-04-17 11:49:00 264

原创 【xdoj难题集】1102 xry111挂灯笼

题目这道题虽然做对的不多,但是我倒是做的异常顺利,直接一遍过,感觉在经历了pfunction之后已经领悟了新一层的dp技巧。说说思路,就是dp递推,关键是掌握如何递推,首先考虑只有一个挂钩的情况,这时候对于灯笼i的情况,只要把两个儿子数量相加为i-1的情况相乘的结果加起来即可(也就是一个卷积),然后考虑挂钩,如果有k个挂钩,那么这时候总挂钩数量为i的情况就是1的时候和k-1的时候的一个卷积。所以只...

2018-04-14 22:55:11 481

原创 【xdoj难题集】1067: P-Function

省赛题,不但是英文的而且有一定的难度。之前一直陷入冥思苦想,结果不知道为什么今天再看到的时候突然灵光一现,一下子就20分钟一遍秒杀了。所以说,对于找方法,找bug这种np问题,运气还是有点重要的。先分析一下这道题,首先函数就是一种映射,从之前的1到n映射到之后的1到n,首先可以证明这个映射肯定是一一映射,即每个点都映射到一个不同的值,因为如果有多个映射到同一个的话,最后n个数就不可能得到n个结果,...

2018-04-14 15:19:17 338

原创 【xdoj难题集】1203 Happy to Eliminate

题点击打开链接又沉浸在了模运算的海洋中了。。。这个模运算真的太恶心了,有时候又神奇又复杂,还是经验不够丰富,导致了很多错误。在此我也得到一个教训,对于涉及模运算的问题,宁可写的复杂一些,难看一些,也不要耍小聪明,那样一旦失误造成的后果可能是惨重的。说说思路,一眼看上去就知道应该是状态压缩dp,但是这个复杂度得好好算一算,首先两数之积不大于40,说明最小变不大于6,因为是三层所以要储存两层内容,但是...

2018-04-14 00:38:58 224

原创 【xdoj难题集】1039: 饭桌上的游戏

题的连接2014年的压轴题,又是模拟(话说为什么最近做了这么多模拟)。总之又是被无数细节给坑了,不过最后结果不错,我这个算法还是挺快的。还是先说说想法,一看到这题的范围,觉得应该不会超时,比较烦的是标记的这个问题,因为如果每轮都要把标记的人算一次的话怕会超时,不过在看到了饭量最大为5之后我打消了这个顾虑,不过我还是没有使用常规的方法(导致因为一个细节错了不少次)。我的想法是因为标记之后死亡的时间是...

2018-04-11 15:21:43 2545

原创 【xdoj难题集】1202 The Offer - Lunatic(附优化版)

 说实话2017年的校赛挺难的,最后三道都不简单,这道题一开始吓了我一大跳,想着如果用最短路算法,魔法阵怎么也要上千万条路径,不过之后看到海拔最高只有100之后总算是安心了。  先说一说大体思路,首先肯定想的是用最短路算法,每个点初始只有最多四条路,每条路的长度也很好求。重点是这个魔法阵,肯定要从高度入手,初始的想法肯定是构造一条轨道,轨道上有高度范围个节点,每个处于法阵里的点和所...

2018-04-10 23:48:58 254 1

原创 【xdoj难题集】1089玩水珠的V8

刚刚历尽千辛万苦,终于搞定了,还是那个问题,细节细节细节。可能模拟还是做得太少,希望以后能好点。再加上这道题我的算法出奇得快,所以还是值得一提的。先说说大体的感想,看到这道题就知道又是一道模拟,刚开始觉得有点难,不过看了之后觉得其实简单了很多,首先其实只有两个过程,分裂和结合,所以要在这些操作上下文章,至于操作的时间先后的问题,我的想法肯定是优先队列,用这个队列记录一种操作的过程,然后再把潜在的新...

2018-04-09 19:04:46 210

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除