自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (3)
  • 收藏
  • 关注

转载 树状数组求区间最大值

这个算法只支持单点修改和区间查询最值。每一次维护和查询的时间复杂度都是O((logn)^2),但这是满打满算的时间复杂度。假设是要维护和查询区间的最大值(最小值将max改成min 就好了)这个算法和树状数组维护和查询区间和的方法很相似: 一、数组的含义1、在维护和查询区间和的算法中,h[x]中储存的是[x,x-lowbit(x)+1]中每个数的和, 2、在求区间最值的算

2017-07-31 11:02:46 1441

转载 [组合数]求组合数的几种方法总结

求C(n,m)%mod的方法总结1.当n,m都很小的时候可以利用杨辉三角直接求。 C(n,m)=C(n-1,m)+C(n-1,m-1);2.利用乘法逆元。 乘法逆元:(a/b)%mod=a*(b^(mod-2)) mod为素数。 逆元可以利用扩展欧几里德或欧拉函数求得: 1).扩展欧几里德:b*x+p*y=1 有解,x就是所求 2).费马小定理:b^(p-1)=

2017-07-28 15:38:59 893

转载 范德蒙恒等式的证明

今天我们来认识组合数学中一个重要的恒等式---范德蒙恒等式。这个恒等式的表述如下             很自然的公式,接下来一起来看看它的证明,在维基百科上给出了两种方法证明,分别如下 (1)组合方法证明     甲班有个同学,乙班有个同学,从两个班中选出个一共有种不同的选法。而换一种思维方式     从甲班中选取个

2017-07-28 14:36:17 1458

转载 子图、生成子图、导出子图和主子图

所有的顶点和边都属于图G的图称为G的子图。含有G的所有顶点的子图称为G的生成子图。    设V1是V的一个非空子集,以V1为顶点集,以两端点均在V1中的边的全体为边集的子图称为G的导出子图,记作G[V1]。导出子图G[V\V1]记为G-V1,它是从G中删去V1中的顶点以及与这些顶点相关的边所得到的子图。若V1={v},则把G-{v}简记为G-v, 称为主子图。在图1-13中,G1是G的生成子图

2017-07-28 14:20:52 18830

原创 2017 Multi-University Training Contest 1001 (简单)(技巧)

题目链接题解:题目等价于求2^m-1在十进制下的长度-1,所以答案就是log10(2 ^ m  - 1) 。由于2 ^ m 一定不等于10的某次幂,所以2^m 与2 ^ m - 1是同样的长度。所以答案应该为log10(2 ^ m - 1) = log10(2 ^m) = m * long(2)  (向下取整)代码如下:#include using namespace std;in

2017-07-26 12:50:19 261

原创 解决静态查找相同串或者有相同前缀的所有串的好方法

方法一:可以将所有带查询的串进行排序,然后就可以发现,只有排序后相邻的串才可能相同(或者有相同的前缀)。所以,在那之后,只需要从头扫一遍,即可得到答案方法二:将所有带查询的穿按位进行哈希,然后在哈希的结果中查找是否有相同的串(或相同前缀)

2017-07-23 17:10:19 433

原创 poj3071 概率dp

由题可知,本题为概率dp。d[i][j] 表示第i个人从第j轮晋级的概率。 则dp[i][j] = ∑〖dp[k][j-1] * p[i][k]〗* dp[i][j-1],其中k为在当前轮次所有可能与i交手的对手。上式表示本轮中于每一个可能的对手的出现概率与胜率乘积再乘上本人晋级本轮的概率。最后答案只要找到最大值即可。 代码如下:#include <cstdio>#include <iost

2017-07-23 14:25:05 224

原创 约数个数与具体值的求解

1:求一个数的约数个数:由约数个数定理可知,对于一个大于1正整数n可以分解质因数: 则n的正约数的个数就是  。其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。2 求1到n的所有数的约数个数:         按顺序考虑每一个质数p及他们的次方,对于任意一个数y = p^w * x, 则他应当新增的因子数为w * (x的因子数)。先筛出素数,再按照枚举的方法

2017-07-21 19:29:58 666 1

原创 OpenJ_POJ - C17J Pairs(数学+技巧暴力)

题目链接题解:由于注意到x的范围较小,我们显然可以同时枚举x与p进行计算。先枚举想,在枚举p的过程中,我们发现,对于同一个x,不同的p可能会算出同一个y,导致重复。为了解决这种状况,我们可以先求出所有数的所有因数,在那之后,我们对于同一个x,用一个vis数组记录所有产生的y,并在记录时计数即可。PS:技巧:我们可以在每次记录y是,vis数组的标记用当前的x,而不是1,这样判断时只需要比较是

2017-07-21 15:50:42 504

转载 HDU2256&&HDU4565:给一个式子的求第n项的矩阵快速幂

HDU2256题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2256题意:求(sqrt(2)+sqrt(3))^2n%1024是多少。这个题算是hdu4565的一个常数版本了,所以我们先说这道题。对于这道题的做法我们可以计算((sqrt(2)+sqrt(3))^2)^n=(5+2*sqrt(6))^n,对于(5+2*sqrt(

2017-07-21 14:36:50 237

转载 fzu2265Card Game (Second Edition) (数学)(简单)

b 从小到大排序, a对应有n!中排列,其中a[i]对于某个b[j]是有(n-1)!都是对应的(因为a[i]只能对应n个b中),而a[i]对应b[j]的值是一定的,可以直接计算出每个a[i]在这n!中方案中的贡献值,所有a[i]然后相加除以n!(可以把n-1!去掉,最后就是除以n了)。 就是说每个a[i]都会有n*(n-1)!种对应情况,然后只要算出n种情况里面哪几个贡献出了1分,最后

2017-07-20 11:25:26 477

转载 一些扩展kmp的总结

花了一天多时间学了下ex_kmp。。。。可以看刘雅琼的ppt,讲的非常清楚:下载地址:http://url.cn/Rvjxa9ex_kmp可以在线性时间内求文本串的每个位置与模板串的最大公共前缀 ,写法和普通kmp差不多。。我的写法是:next[i]: P[i..m-1] 与 P[0..m-1]的最长公共前缀ex[i]: T[i..n-1] 与 P[0..m-1]的

2017-07-18 10:53:42 349

转载 ACM中常用算法—-字符串

ACM中常用的字符串算法不多,主要有以下几种:Hash字典树KMPAC自动机manacher后缀数组EX_KMPSAM(后缀自动机)回文串自动机下面来分别介绍一下:0. Hash字符串的hash是最简单也最常用的算法,通过某种hash函数将不同的字符串分别对应到不同的数字.进而配合其他数据结构或STL可以做到判重,统计,查询等操作.#### 字符串的hash

2017-07-17 14:13:00 642

转载 数位dp总结 之 从入门到模板

来源:http://blog.csdn.net/wust_zzwh/article/details/52100392基础篇数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦!之所以要引入数

2017-07-17 13:56:08 563

转载 字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组

涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机KMP算法Extend-KMP 后缀树 后缀数组 trie树trie图及其应用。当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟悉的大概是kmp,即使如此还是有相当一部分人也不理解kmp,更别说其他的了。当然一般的字符串问题中,我们只要用简单的暴力算法就可以解决了,然后如果暴力效率太低,就用个hash。当然hash也是一个面试中经常

2017-07-17 13:49:35 524

原创 Codeforces346B Lucky Common Subsequence(KMP+dp)

题目链接题解:对于LCS问题,我们的正解是用dp解决。而本题目中还有了一个数组是不能够包含的,所以我们可以给dp新增加一维。dp[i][j][k]表示A串前长度为i的子串,B串前长度为j的子串,能匹配到的C串的最长位置为k时的最长长度。转移时,与LCS问题类似。对于k的转移,就是要判断当前为是否可以继续匹配到C中k的下一位中去,如果可以,就加1,不可以,就根据失配函数进行转移,知道可以

2017-07-15 12:29:55 423

转载 POJ3630(Trie树)

题意:求给定的多个串中是否存在,某个串是另一个串的前缀。解题思路:使用Trie树。在每次插入一个串的同时判断。对于该问题,只存在以下两种情况: 1.当前插入的串的前缀是前面的某个串。对于这种情况,把前面插入的串的最后一个节点记为危险节点。那么在后面插入串的时候,如果经过危险节点,说明这种情况成立。  2.当前插入的串是前面某个串的前缀。对于这种情况,把插入串的最后一个节点单

2017-07-12 20:52:46 291

原创 CodeForces - 757C (反向思维)

题目链接本题一开始正面去想,就像是一个集合的操作,极其复杂。但实际上,如果我们倒着想,将每个动物所在的gym都记录下来,如果出现多次,就记录多次。那么我们知道,只要两个动物的出现序列相同,就可以交换。而判断相同时,我们可以用类似后缀数组判断时的思想,将所有序列都排好序,然后只有相邻的序列才有可能相等。这样,只要扫一遍,就可以求出答案。代码如下:#include using names

2017-07-12 11:23:08 486

原创 分解质因数的技巧

在ACM比赛中,我们经常要分解质因数。那么我们应当如何快速分解质因数呢?其实,在我们用筛法求素数时,我们使用线性筛的方法,并在每次筛的过程中,记录下每个数的最小质因数。那么在分解质因数的时候,我们只需要不断除每个数的最小质因数,就可以快速得到分解的质因数。(不要用试除法了。。)

2017-07-08 20:17:18 2591

转载 hdu 5015 233 Matrix (矩阵快速幂)

233 MatrixTime Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 749    Accepted Submission(s): 453Problem DescriptionIn our daily lif

2017-07-07 21:07:49 255

转载 动态规划优化整理

1.四边形优化 m(i, j)状态方程满足:i i = j: 0i > j: INF对于i 令s(i, j)为对应决策变量的最大值,即m(i, j)通过s(i, j)达到最优, 并且s(i, j)最大s(i, j) = MAX(i如果m(i, j)满足四边形定理, 则s(i, j) 于是m(i, j) = MIN(s(i, j-1) 2.斜率优化此处以d

2017-07-07 13:25:25 332

原创 Educational Codeforces Round 19 F(dp+队列优化)

网址:http://codeforces.com/contest/797/problem/F显然,要先排序。我们可以先处理出所有老鼠到所有洞的距离,p[i][j]表示第j只老鼠到第i个洞的距离。由于我们每次求的时候都是一段区间的老鼠到一个洞中,所以我们可以通过求前缀和优化计算。对于p[i][j],其前缀和为d[i][j],表示前j只老鼠都进入i洞中所需要的花费。在实际运算中,因为我

2017-07-07 12:42:10 345

转载 STL - deque(双端队列)

Deque简介deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。deque在接口上和vector非常相似,在许多操作的地方可以直接替换。deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。deque头部和尾部添加或移除元素都非常快速。但是在中部安插

2017-07-06 21:06:05 203

转载 hdu4507(数位dp,较复杂)

这题麻烦就是要求数的平方和。我们先考虑求和的问题,一个区间,数位dp能在一些约束下计数,现在要这些数的和。其实组合数学搞搞就可以了:如 现在枚举的某一位pos,我统计了这一位枚举i的满足条件的个数cnt,其实只要算i对总和的贡献就可以了,对于一个数而已第pos位是i,那么对求和贡献就是i*10^pos,就是十进制的权值,然后有cnt个数都满足第pos位是i,最后sum=cnt*i*10^pos

2017-07-04 22:45:55 440

原创 HDU 3709 数位dp

本题只需枚举中轴位置,然后数位dp即可PS:注意00,000这些都不能算进去,要单独去掉(因为在不同的中轴线下,这些数会算多次0,导致结果错误)#include using namespace std;#define ll long longconst ll maxn = 20;ll dp[maxn][4000][maxn];ll a[maxn];ll dfs(int pos,

2017-07-04 16:09:07 222

原创 POJ 3252(数位dp,前导0)

这题的约束就是一个数的二进制中0的数量要不能少于1的数量,通过上一题,这题状态就很简单了,dp[pos][num],到当前数位pos,0的数量减去1的数量为num的方案数,一个简单的问题,中间某个pos位上num可能为负数(这不一定是非法的,因为我还没枚举完嘛,只要最终的num>=0才能判合法,中途某个pos就不一定了),这里比较好处理,Hash嘛,最小就-32吧(好像),直接加上32,把32当0

2017-07-04 16:06:19 783

转载 HDU 4734(数位dp)

题目给了个f(x)的定义:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出a,b求区间[0,b]内满足f(i)常规想:这个f(x)计算就和数位计算是一样的,就是加了权值,所以dp[pos][sum],这状态是基本的。a是题目给定的,f(a)是变化的不过f(a)最大好像是4600的样子。如果要mems

2017-07-04 16:04:10 231

原创 HDU 2089 (数位dp)

入门题。就是数位上不能有4也不能有连续的62,没有4的话在枚举的时候判断一下,不枚举4就可以保证状态合法了,所以这个约束没有记忆化的必要,而对于62的话,涉及到两位,当前一位是6或者不是6这两种不同情况我计数是不相同的,所以要用状态来记录不同的方案数。dp[pos][sta]表示当前第pos位,前一位是否是6的状态,这里sta只需要去0和1两种状态就可以了,不是6的情况可视为同种,不会影响计数

2017-07-04 16:02:14 353

线性规划与网络流24题 题目-测试数据-解题报告

网络流24题 题目-测试数据-解题报告

2017-08-02

空空如也

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

TA关注的人

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