摘要: 在OI竞赛中,当遇到数组的数据范围远远大于数组大小时,就可以使用离散化。 把A[1~N]数组的每一位都对应在[1~N]上的某个数字。当数组中有重复数据时,比较常用的方法就是lower_bound+unique, 这样的话离散化完的数据还是能保留重复的。 阅读全文
posted @ 2019-04-01 11:34 MoerBlack 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 三分可以说是二分的升级版,二分是在有序数组中操作,而三分则是在单峰函数中操作。以凸函数为例,把区间三等分,L、A、B、R。当f(A)>f(B)时,就把B至R这一段舍弃掉,而当f(A)<f(B)时,就把L至A舍弃,当f(A)和f(B)相等时,就留下中间一段。 例题 luoguP3382 阅读全文
posted @ 2019-03-20 11:02 MoerBlack 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 二分在C++ STL中可以直接使用,lower_bound 与 upper_bound 函数。lower_bound 代表在有序数组中找到第一个大与等于键值的位置, 而upper_bound代表第一个大于键值的位置,不过并不是所有与二分有关的可以用这两个函数。 在手动写二分时,主要要注意的是L R和 阅读全文
posted @ 2019-03-18 16:43 MoerBlack 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 倒序存高精度整数,从个位开始对齐。输出时也倒序输出。 1.加法 2.减法 3.乘法 4.除法(高精除以高精) 阅读全文
posted @ 2019-03-06 14:37 MoerBlack 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 普通排序:使用c++的stl工具就可以完成,在头文件中加入algorithm。例如要对数组a[1]~a[n]进行排序,sort(a+1,a+n+1)即可。 下面说一些sort的拓展。sort默认的是升序,要是需要改成降序,可以自己写一个cmp比较函数, 或者也可以在头文件中加入functional, 阅读全文
posted @ 2019-02-26 18:28 MoerBlack 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2330 这是一道比较裸的差分约束,这里求的是最小值, 建立一个超级原点0,跑spfa。 主要的点都在程序中,但是有几个注意点: 1.这里求的是最长路,可以 把边权都取负,就可以跑最短路,最后答 阅读全文
posted @ 2017-10-19 16:46 MoerBlack 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 首先,想到容斥原理 答案是 所有情况 没有一个素数的 两部分分别处理 dp方程非常好列 可以用矩阵快速幂优化 P.S. 矩阵这一块需要提高啊! cpp include include define ll long long using namespace std; const ll mod=2017 阅读全文
posted @ 2017-05-02 22:56 MoerBlack 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 感觉自己的概率与期望不是非常熟练,所以练习一下。 首先,这道题用二元组(x,y)表示状态,表示当前A走到x,B走到y 然后可以列出n*n个方程 高斯消元即可,时间复杂度O(n^6) P.S. 注意几个赋值为-1的地方 阅读全文
posted @ 2017-05-02 17:02 MoerBlack 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 一眼推公式+莫比乌斯反演 下面来推公式: (借用dalao的图 http://www.cnblogs.com/SiriusRen/p/6703062.html) 然后就可以分块啦!! P.S. 被卡TLE了好多次。。。。 后来又新预处理了一些东西才AC的。。 跑得好慢。。 ↑不要介意这丑陋的代码。。 阅读全文
posted @ 2017-04-27 23:14 MoerBlack 阅读(243) 评论(0) 推荐(0) 编辑
摘要: A.扫一遍,O(n)即可 注意点:1.一定要修改一次 2.字符串长度为奇数时也可以修改中间一个 B.模拟 官方题解貌似用的dp 我用了三个map维护了一下,也是可以的。 下面题感觉出的很不错 C.列一下式子就可以发现: 首先,一定是有可行方案的 其次,只要把每个数改成偶数就可以了 所以说讨论相邻的两 阅读全文
posted @ 2017-04-25 23:59 MoerBlack 阅读(198) 评论(0) 推荐(0) 编辑