- 博客(6)
- 收藏
- 关注
原创 题解 noip2013 华容道
题目链接 说在前面: 首先这道题比较冗杂,如果因为您不太接受我的码风/表达方式而带来了不太好的阅读效果,我向您道歉(鞠躬 题面请戳链接,请您在确保对这道题目的背景和做这道题的大致方向有了一定的掌握后,再食用这篇博客,以确保较好的阅读效果 除去多次询问不谈,这道题大致的框架是非常明显的搜索。但是虽然是多次询问,棋盘的状态是不会变的,并且只有部分的位置是真正有价值的。那么就可以考虑图论建模,在这些有价...
2019-11-05 16:51:08 188
原创 浅析线段树(使用lazy tag)
这是百度百科上的图,线段树定义可以看这里->定义戳我 任何一个区间都能被分成两个小区间,从而能够把对于大区间的查询转换为对几个小区间和小小区间和小小小区间……的查询。 这是我对线段树的朴素理解。 从图上也可以明显地看出任意一个长度大于1的区间都由两个小的子区间组成,子区间再往下分,直到区间内只有一个元素无法再分。**因此,对于每一个长度大于1的区间[l,r],有mid=(l+r...
2018-08-26 15:38:39 2539 7
原创 题解 [ZJOI2008]骑士
题目链接 如果它不是有nnn条边,而是n−1n-1n−1条边的话,它就是一棵树,也就是没有上司的舞会。 现在只多了一条边,那它就是基环树。相当于多了一个环,其他的结构没有很大的变化。至于对于基环树的处理,一般可以这么处理: 找到环 将环断开,让它成为一棵树,对于断开边的两个端点分别进行树形dp。当然,需要注意一些关于这两个点的限制条件 将信息整合,更新答案 需要注意的是,这里可能不只是一棵树,...
2019-11-07 21:51:19 216
原创 线段树?树状数组!
这里写自众所周知,线段树可以实现**区间修改+区间查询**。但实际上,树状数组也可以,并且在较为一般的情况下**常数更小、占用空间更少、码量更小** ![比较图片](https://cdn.luogu.com.cn/upload/image_hosting/abmoosr6.png 上面为树状数组实现,下面为线段树实现(已经用了lazy tag),可以看到明显的碾压 设d[i]d[i]d...
2019-10-22 20:29:59 243
原创 浅谈快速排序
它的基本框架就是:定左端一个数为基数x,提取出来(相当于空出一个位置放置右端比x大的数)。然后把小于x的数扔左边,大于x的数扔右边。 两个数i , j代表数组两端始末位置,开始扫描。因为第一步处理了左边,第二步就应该处理右边。 从右边扫描,大的不管,将比x小的数扔到数组左端,左端前进一位;再从左开始扫描,将比x大的扔到数组右端,右端后退一位。如此反复,当i = = j时,说明数组...
2018-08-26 19:03:53 192
原创 通过二进制理解快速幂
任何十进制数都可以用二进制来表示,且每一位最多为1,最少为0。 举个例子,15=2°×1+2¹×1+2²×1+2³×1。利用二进制转换方法可将15转换为1111(拆分成二的幂)。 那么a^15就等于a^2°×1×a^2¹×1×a^2²×1×a^2³×1,即:a的二次方幂与15在二进制位上的各位的乘积再相乘。 代码实现: long double power...
2018-08-26 19:01:00 319
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人