- 博客(16)
- 收藏
- 关注
转载 bzoj 2724: [Violet 6]蒲公英
分块 提供几个必须要知道的注意事项。 首先暴力统计区间众数的时间复杂度为接近\(O(n^2)\),时间复杂度不够优秀,所以我们 遇事不决先分块考虑分段处理。数据范围比较大,所以我们离散化。所谓离散化就是将数据排好序后用ta的排名来代替ta本身(需要另开一个数组)。\(nlog(n)\)时间内就能完成。 void yych()//离散化 { len=sqrt(n); me...
2019-09-22 11:39:00 128
转载 bzoj 4552: [Tjoi2016&Heoi2016]排序
ODT&二分 看到没有人写关于ODT的题解,所以我决定来一发ODT题解。 首先这道题的的整体思路就是二分,关于二分的正确性可以感性的理解一下:我们每一次二分一个答案,然后将\(<mid\)的值变为1,\(\geq mid\)的变为0,每一次只用对0/1序列进行操作,倘若最后我们询问的位置上为0,说明这个位置上的值\(< mid\),否则就\(\geq mid\),所以...
2019-09-20 21:22:00 158
转载 Luogu P5350 序列
ODT 这道题目太毒瘤啦,经过了无数遍的TLE、WA,和RE(TAT),我终于了解了珂朵莉树的强(R)大(E),我会详细的介绍关于TLE,WA和RE的原因。 首先我们看到区间赋值操作和保证数据随机,我们的第一直觉肯定是幸福的珂朵莉树啦,虽然在刻意构造的数据下她的时间复杂度是错误的,但是在随机数据下她的表现十分优秀,甚至可以碾压其他数据结构。 1.首先是split操作,这是ODT的基本操作...
2019-09-20 07:45:00 158
转载 UVA12663 【High bridge, low bridge】
差分 题目大意:一共有n座桥,每个桥都有一个高度,海水每次都会涨落,问被淹次数大于等于k的桥一共有多少座。 对于海水的涨落,可以看成是区间加法(被淹的桥次数加一),暴力搞的话肯定会TLE,所以我们珂以用差分来实现区间加法,从l到r加上x就相当于差分数组里的l处+x,r+1处-x,因为这个题还需要记录上一次海水所在的位置,所以我们珂以这样写: for(int i=1;i<=m;++i...
2019-09-19 10:28:00 95
转载 Luogu P2618 数字工程
DP 根据题目下面的提示&说明,我们就能知道做这个题的大体思路:先求出来每一个数的素数因子,然后就开始DP。 求素数因子的方法就是用类似于欧拉筛的操作,倘若一个数一直都没有被筛到过,那么ta就是一个素数,然后我们就可以用ta来继续筛其它的数,并且我们只用筛ta的倍数,因为只有ta的倍数才含有这个素因子,被筛到的数一定要及时打上标记 不要问我为什么那么我们需要开多大的数组来记录素因...
2019-09-17 20:43:00 105
转载 Luogu P1462 通往奥格瑞玛的道路
搜索 提供一种不一样的做法。 我在写这个题的时候刚刚学了二分和搜索 还不会最短路,就把这个题当做二分题写了。可能是数据比较水吧。首先看到最小值最大或者最大值最小,我们的第一直觉就是二分答案。 我们二分最大值,我们只走那些小于等于二分的答案的路,如果我们能够走到终点,就说明我们设置的条件比较弱,我们就可以减小二分的答案,当我们走不到终点的时候,就说明我们二分的条件比较严,我们就应该调大我们...
2019-09-17 19:22:00 104
转载 高精度模板
众所周知,高精度一直都是非常不友好滴~,所以wljss在这里为大家提供一下重载后的结构体高精度(可处理负数),还是非常实用滴^_^. 本模板不定期更新,若有错误之处还望不吝赐教,目前重载的符号有: 1.*:高精度乘法 2.+:高精度加法 3.-:高精度减法 4./:高精除低精 5.>>:高精度cin读入 6.<<:高精度cout输出。 #include<i...
2019-09-16 20:59:00 141
转载 Luogu P1797 克鲁斯的加减法_NOI导刊2010提高(05)
高精&模拟 提供一种不一样的高精度写法。 我们可以使用结构体来模拟高精度,顺便重载一下\(+\) \(-\) \(\times\)就可以啦。但是我们很快就会发现一些问题,如果正数减负数怎么办?用Pascal当然是大力讨论啦。 我们可以先不管数的正负,在进行加减的时候只处理 正数加正数 和 大的整数减小的正数,如果有负数就变号再进行加减法。乘法的话遵循同号为正数异号为负就可以啦。另...
2019-09-16 08:04:00 127
转载 UVA11825 Hackers' Crackdown
状压DP 首先感谢lrj的透彻讲解. 我们要使一项服务瘫痪,就必须选择一些计算机,使它们与他们所相连的计算机是所有的计算机,即:我们将每一个计算机本身及其相连的计算机看成一个集合\(P_i\),我们要分成尽量多的集合,使每一个集合里\(Pi∪...∪Pj\)为全集。 我们又发现n的值比较小,因此我们可以考虑一下状压,\(P_i\)的每一位表示\(i\)号计算机的联通情况,\(C_i\)(...
2019-09-11 21:08:00 108
转载 bzoj 3155: Preprefix sum
树状数组 我们需要求的是\(\sum_{i=1}^{k}S_i\) ,即\(\sum_{i=1}^{k}\sum_{j=1}^{i}a_i\). 暴力求解肯定是不行的,化简式子是OIer的优良传统,所以我们可以考虑化简一下式子。 我们可以考虑一下每一个元素对前前缀合的贡献,第\(i\)个数被\(i\)~\(k\)之间的每一个\(S_j\)都计算了一遍,所以它的贡献就是\((k-i+1)\...
2019-09-11 11:44:00 107
转载 bzoj 1854: [Scoi2010]游戏
二分图匹配 我们都能够想到让每个装备和它的属性去连边. 首先提供一种初步想法: 如果我们闭着眼去跑二分图匹配的最大匹配,那么我们得到的答案很显然是错误的.因为我们在得到最大匹配的时候没有考虑从\(1\)到\(n\)的连续性。 那我们该怎么办呢?睁开眼再去跑二分图匹配的最大匹配 我们可以二分一个答案,我们只对小于等于\(mid\)的属性去跑最大匹配,最后看看匹配的点的个数是否等于mid,如...
2019-09-10 20:14:00 85
转载 UVA1608 不无聊的序列 Non-boring sequences
分治 首先感谢lrj的透彻讲解。 开始的时候我们可以用map来求出一个数的上一次出现的位置和下一次出现的位置,然后能判断一个数在\(l\)到\(r\)中这个数是否只出现了一次。 既然任意连续子序列都至少有一个元素唯一,那么我们可以找到这个序列中一个唯一存在的数,我们姑且认为ta的下标是k,进而我们发现任何包含这个数的区间都不是无聊的区间。 所以我们可以接着判断\(l\)到\(k-1\)的...
2019-09-10 18:04:00 237
转载 UVA1747 【Swap Space】
贪心 对于每一项的交换,设交换前内存为a,交换后内存为b,那么就有a>b或\(a \le b\)。 我们分开处理,将a>b的分为一类,a \le≤ b分为另一类,显然,我们将第一类按照a从小到大排序更优,这样我们就可以用较少的空间换取更大的空间。 将第二类按b从大到小排序,这样我们能花费较少的空间来换取空间。 记录下剩余的空间的同时记录一下需要的最大空间即可。 献上我又臭又长...
2019-09-10 12:01:00 124
转载 Luogu P5550 Chino的数列
矩阵加速递推 n的范围比较小,k的范围很大,我们可以考虑从n入手。 1.首先我们知道任何矩阵*单位矩阵都不会改变. 所以对于交换操作,我们可以造出一个这样的矩阵: 除了第s、m行,其他每一行都是f[i][i]=1; 第s行:f[s][m]=1;第m行:f[m][s]=1; 这样我们就完成了交换操作。 2.对于左移操作,我们也可以造出一个这样的矩阵: 除了第n行,其他每一行都是f[i][...
2019-09-10 11:56:00 94
转载 bzoj 1799: [Ahoi2009]self 同类分布
数位DP|记忆化搜索 听隔壁巨佬说DP和记搜可以互相转换 显然这个题是可以用记忆化搜索过的,那我们应传哪几个参数? 首先就是记搜最基本的位置标记。 然后就是枚举的数字各位之和,以及取模之后的余数(判断能否整除某个数)。 最后就是判边界的参数。 当我们搜到最后一位时如果余数为0,并且各位之和=mod,那就直接返回1,否则返回零。 显然我们把这几个数装进数组里,是开不下的。 long lon...
2019-09-10 11:44:00 84
转载 bzoj 1054: [HAOI2008]移动玩具
状压bfs 一共有16个位置,最多会有 \(2^{16}=65536\) 种情况,用数组完全开的下。 用二进制中的1表示该位置有玩具,0表示该位置没有玩具。 由于广搜最先搜到的是最优解,直接用数组记录是否到达过该状态,顺便记录ans. 移动前的状态ans为0. 然后大力讨论12种情况即可 时间复杂度O( \(2^{16}\) )O(能过) 献上我又臭又长的代码 #include<...
2019-09-07 19:43:00 169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人