- 博客(49)
- 资源 (3)
- 收藏
- 关注
原创 HDU4416(后缀自动机)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4416 题目大意:给一个字符串S和一系列字符串T1~Tn,问在S中有多少个不同子串满足它不是T1~Tn中任意一个字符串的子串。#include #include #include #include using namespace std;typedef long long
2013-08-31 21:14:37 3038
原创 SPOJ1812(后缀自动机求n个串的最长公共子串)
题目:http://www.spoj.com/problems/LCS2/ 题意:给定n个串,求它们的最长公共子串。 思路就是:先将一个串建SAM,然后用后面的串去匹配,对于每一个串,保存最大值,对于不同的串,更新最小值。SAM结点多两个值,ml表示多个串的最小值,nl表示当前串匹配的最大值。 #include #include #include #incl
2013-08-31 20:09:37 3111 1
原创 SPOJ1811最长公共子串问题(后缀自动机)
题目:http://www.spoj.com/problems/LCS/ 题意:给两个串A和B,求这两个串的最长公共子串。 分析:其实本题用后缀数组的DC3已经能很好的解决,这里我们来说说利用后缀自动机如何实现。对于串A和B,我们先构造出串A的后缀自动机,那么然后用B串去匹配,对于B,我们一位一位地扫描,维护一个ans值,表示从B串的开始到B[i]的这个子串与A的最长公共子
2013-08-31 16:54:49 3825
原创 ZKW线段树
题目:敌兵布阵 题意:给一个数组,然后有一系列操作:(1)把某一个值加上一个数,(2)把某一个值减去一个数,(3)求一段区间的和。#include #include #include using namespace std;const int N=100005;int M;int T[4*N];void PushUP(int rt){
2013-08-31 10:41:00 6462
原创 SPOJ375(树链剖分)
题目:Query on a tree 题意:给定一棵树,告诉了每条边的权值,然后给出两种操作:(1)把第i条边的权值改为val(2)询问a,b路径上权值最大的边 分析:本题与HDU3966差不多,区别就是:HDU3966是告诉树中点权的值,这里是边权。所以我们可以转化,用边的孩子节点来表示该边。#include #include #include #in
2013-08-30 20:20:27 3430
原创 HDU3966(树链剖分)
题目:Aragorn's Story 题意:给一棵树,并给定各个点权的值,然后有3种操作:I C1 C2 K: 把C1与C2的路径上的所有点权值加上KD C1 C2 K:把C1与C2的路径上的所有点权值减去KQ C:查询节点编号为C的权值 分析:典型的树链剖分题目,先进行剖分,然后用线段树去维护即可,注意HDU的OJ采用Windows系统,容易爆栈,所以在代码前面加
2013-08-30 14:15:10 9218 4
原创 树链剖分原理
树链剖分用一句话概括就是:把一棵树剖分为若干条链,然后利用数据结构(树状数组,SBT,Splay,线段树等等)去维护每一条链,复杂度为O(logn) 那么,树链剖分的第一步当然是对树进行轻重边的划分。定义size(x)为以x为根的子树节点个数,令v为u的儿子中size值最大的节点,那么(u,v)就是重边,其余边为轻边。 当然,关于这个它有两个重要的性质:(1)轻边
2013-08-30 14:02:12 17999 6
原创 HDU4546(优先队列)
题目:比赛难度 题意:给一个整数序列,长度为n,求在这个序列的子序列中和为第m大的数。 分析:设置优先级队列{ sum: 当前和 next: 加入下个元素的和 ith: 将要考虑的下个元素}以next为优先级,小的先出队读入数据后排序,初始化队列第一个元素(0,a[0],0)每次出队一个元素,入队(sum,sum+
2013-08-27 18:47:13 1280
原创 deque,list,queue,priority_queue
1.deque deque双端队列容器与vector一样,采用线性表顺序存储结构,但与vector唯一不同的是,deque采用分块的线性存储结构来存储数据,每块的大小一般为512字节,称为一个deque块,所有的deque使用一个map块进行管理,每个map数据项记录各个deque块的首地址,这样一来,deque块在头部和尾部都可以插入和删除元素,而不需要移动其它元素,在尾部插入元
2013-08-25 20:07:35 2343
原创 set与map容器
首先来看看set集合容器: set集合容器实现了红黑树的平衡二叉树数据结构,在插入元素时它会自动调整二叉树的排列,把该元素放到适当的位置,并且保证左右子树平衡。平衡二叉检索树采用中序遍历算法。 对于set,vector,map等等,它们的前向迭代器定义是这样的(以set为例): set::iterator it;for(it=s.begin();it!=s.end(
2013-08-25 19:21:33 7716
原创 HDU4532(组合DP)
题目:安排座位 解析:http://www.douban.com/note/269136472/ #include #include #include using namespace std;typedef long long LL;const LL MOD=1000000007;LL a[550];LL A[550];LL C[550]
2013-08-25 15:49:01 2261
原创 HDU4514(非连通图的环判断与图中最长链)
题目:设计风景线 题意:给定一个无向图,图可能是非连通的,如果图中存在环,就输出YES,否则就输出图中最长链的长度。 分析:首先我们得考虑这是一个无向图,而且是非连通的,那么就不能直接像求树那样来求最长链。对于本题,首先得判断环,在这里我们就用并查集判环,因为并查集本身就是树型结构,如果要连接的两点的祖先都相同,那么就已经有环了,这样直接输出YES,如果没有环,就应该输出最
2013-08-25 13:58:46 3501
原创 Struts2概述
MVC设计模式的优点主要有:(1)低耦合性 (2)高重用性 (3)可适用性 (4)可维护修性 Model1与Model2的模型分别如图所示: Model1: Model2: 可以看出Model2比Model1更有好处,Model2中JSP只负责页面显示,大大减轻了JSP的负担,很多都交给Servlet处理,Model2是标准的MVC设计模式。
2013-08-24 20:10:49 1511
原创 n%i之和
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1168 题意:给定一个n,注意这里n小于10^12,求 分析:早些时候就做过一道题,在这里:http://blog.csdn.net/acdreamers/article/details/8809517由于当时这题数据小,直接计算步长更方便,
2013-08-24 09:19:12 3324 4
原创 NKU两题简单题解析(递归分析与位运算技巧)
题目:http://acm.nankai.edu.cn/p1002.html 题意:对给定的f(n),当 n>=50025002 的时候,f(n)=n-5;当 n 分析:注意本题给出数据n很大-2147483647的,那么在这里,虽然不能直接递归,但是我们还是可以用递归的思想。具体做法就是: 如果n>=50025002,那么我们可以直接计算,如果n上去计算,那么我们可以
2013-08-23 10:41:05 1471
原创 分块计算
题目:http://acm.upc.edu.cn/problem.php?id=2219 题意:It's easy for ACMer to calculate A^X mod P. Now given seven integers n, A, K, a, b, m, P, and afunction f(x) which defined as following.f
2013-08-22 17:12:57 1671
原创 二次同余方程的解
题目:http://acm.timus.ru/problem.aspx?space=1&num=1132 题意:就是给出方程,p为素数,求在区间内的解。 这个思路很简单,详见:http://algo.ftiasch.com/tag/number-theory/一开始TLE,原因是我用了二分加法,以后记住:二分加法是适合很大数的,比较小的数就直接乘,不然数据多了可能TLE。
2013-08-22 14:58:00 25716 7
原创 2013年东北赛B题(数位DP)
题目描述: Number Pairs Time Limited 1000ms Memory Limited 16M Description: Edward finds some Edward Number Pairs,which are defined below:
2013-08-21 15:52:58 2001 2
原创 Java内存管理
Java的内存管理有内存分配与内存回收,Java中内存分配与回收完全用虚拟机自动实现。 内存分为:栈,堆,代码区,静态变量存储区。 栈:存放局部变量,引用对象,形参(形参是一种特殊的局部变量)。例如,定义局部变量int i=20; 那么i分配在栈中,栈中 的内容用完后立即释放,所以速度较快,注意一点,基本数据类型不一定分配在栈中。 堆:存放new出来的对象,堆里面的
2013-08-20 09:58:39 1418
原创 表为平方和初级版
现在我们来研究一个我觉得有点难的问题: 对于方程:,我们输出符合条件的,其中,要求,输出按照x递增的顺序输出。 因为数据n很大,所以当然不是枚举,那么就要用到很多数论知识,我是花了整整两天才搞定的,在此过程中也学到了很多,前面的几篇博文都是为这题服务的。 本题用到的知识:欧几里德算法,快速幂取模,Miller_Rabin素数测试,Pollard_rho大数分解,二次域,
2013-08-19 19:55:58 3933 6
原创 关于丢番图方程x^2-dy^2=-1
我们知道丢番图方程,其中d是非完全平方正整数,那么此方程就是Pell方程,到目前为止对于它的最优求解方法就是经典的连分数问题。可以看这里:http://blog.csdn.net/acdreamers/article/details/8529686 那么对于上述的Pell方程来说,它一定是有解的,而现在我们研究另一个丢番图方程:,其中同样要求d是非完全平方正整数,对于这个方程,它就
2013-08-18 12:02:50 5508 5
原创 POJ1106(简单几何--极角排序)
题目:Transmitters 题意:给一个半圆的半径和圆心坐标,再给平面上的n个点,这个半圆可以绕圆心任意旋转,问半圆最多能覆盖多少个点? 分析:本题可以这样做,我们只需要考虑到圆心距离小于或者等于半径的那些点,因为大于半径的点一定不能覆盖到,那么这样我们把符合条件的点全部存入一个数组p[],那么然后就二重循环枚举每一个点与圆心所连的直线的的左侧有多少个点,记录最大即可。
2013-08-17 16:34:33 3259
原创 POJ3608(旋转卡壳--求两凸包的最近点对距离)
题目:Bridge Across Islands 分析:以下内容来自:http://blog.csdn.net/acmaker/article/details/3178696 考虑如下的算法, 算法的输入是两个分别有m和n个顺时针给定顶点的凸多边形P和Q。1.计算P上y坐标值最小的顶点(称为 yminP )和Q上y坐标值最大的顶点(称为 ymaxQ)。2.为多边形在
2013-08-17 15:50:28 4810 1
原创 POJ1228(稳定凸包问题)
题目:Grandpa's Estate 题意:输入一个凸包上的点(没有凸包内部的点,要么是凸包顶点,要么是凸包边上的点),判断这个凸包是否稳定。所谓稳定就是判断能不能在原有凸包上加点,得到一个更大的凸包,并且这个凸包包含原有凸包上的所有点。 分析:容易知道,当一个凸包稳定时,凸包的每条边上都要有至少三个点,若只有两个点,则可以增加一个点,得到更大的凸包。这样我们可以求出凸包
2013-08-17 14:22:10 5533 7
原创 模拟退火算法
模拟退火算法是用来求解最优化问题的算法。比如著名的TSP问题,函数最大值最小值问题等等。接下来将以如下几个方面来详细介绍模拟退火算法。 Contents 1. 模拟退火算法认识 2. 模拟退火算法描述 3. 费马点问题求解 4. 最小包含球问题求解 5. 函数最值问题求解 6. TSP问题求解 1. 模拟退火算法认识 爬山算法也是一个用来求解最优化问题的算法,每次都向着当前上升最快的方向往上爬,但是初始化不同可能
2013-08-17 10:28:16 89967 16
原创 HDU2650(高斯整数环)
我们把集合:叫做高斯整数环,其中Z表示通常的整数环,而用表示复数域上的整数环。那么什么是环呢?就是通过加减乘三种运算后,仍然能满足本身性质的就叫做环。 范的定义:设,,定义a的范为 设,则(1)为非负整数,并且(2)(3)若,则 逆的定义:设,如果存在,使得,则称为中的乘法可逆元,简称可逆元,并且叫做的逆。 高斯整数是可逆元的充要条件是:中只有4
2013-08-16 19:08:17 6465 2
原创 马尔可夫方程的解
首先马尔可夫方程是这样一个方程:,其中x,y,z为正整数。 那么关于它有几个结论:(1)它有无穷多组解。(2)如果x=a,y=b,z=c是它的一组解,那么x=a,y=b,z=3ab-c是它的另一组解。(3)它的每一组解都能从x=1,y=1,z=1这组解开始通过(2)中的结论迭代产生。 在此方程解中出现的数称为马尔可夫数,分别是:1, 2, 5, 13, 29, 34
2013-08-16 14:57:05 4081
原创 三分搜索
首先来说说三分的概念: 在二分查找的基础上,在右区间(或左区间)再进行一次二分,这样的查找称为三分查找,三分查找通常用来迅速确定最值。 众所周知,二分算法的要求是搜索的序列是单调序列,而三分法所面向的搜索序列的要求是:序列为一个凸性函数。 与二分法类似,三分算法先取整个区间的中间值mid,再取右侧区间的中间值midmid,从而把区间分为三个小区间。
2013-08-15 20:03:37 7157 1
原创 NJUST1712(形成三角形面积为整数的个数)
题目:1712 - Triangles 题意:给定三角形的三点,分别是A,B,C,它们的横纵坐标都属于整数,然后给定两个数n和m。要求满足:, 和这3个条件的三角形个数,并且对1000000007取余。 分析:由于用的是坐标,那么我们很容易想到用叉积来表示面积,那么就得到: 然后就可以很明显知道:与一奇一偶。 然后可以分析出答案就是:
2013-08-15 11:19:51 1615
原创 牛顿二项式定理计算平方根
牛顿二项式定理描述:设是实数,对于所有满足的x和y,有 ,其中 那么现在我们令,则,于是上述定理等价转换为:对于满足的任意z,有 假设n是一个正整数,那么选择为负整数-n,则: 根据上面的推导,我们可以很容易得到: 利用二项式定理我们可以求一个数任意精度的平方根。 我们取上面的为,那么有:
2013-08-14 20:25:48 9931 1
原创 HDU3509(构造矩阵)
题目:Buge's Fibonacci Number Problem #include #include #include using namespace std;const int N=55;__int64 x[N][N],y[N][N],s[N][N],A[N],B[N],F1[N],F2[N],tmp;int f1,f2,a,b,K,n,m;int
2013-08-13 20:28:25 1254
原创 Farey级数
Farey级数,中文名是:法雷级数。 百度上是这样定义的:每一行从0/1开始,以1/1结尾,其它数自左至右将所有的真分数按增加顺序排列;第n行是由所有分母小于或等于n的真分数组成,我们称为n阶法雷级数。 那么我们可以从定义中知道,n阶法雷级数的个数为: 法雷级数有两个重要的性质: (1)如果与是相邻的两项,那么 (2)如果,,是相邻的三项,那么有:
2013-08-13 17:49:14 1902
原创 限制排列与棋盘多项式
首先来说说限制排列 例子:相邻禁位排列问题:在整数1,2,3,...,n的无重全排列中,要求,求全体排列数 分析:利用容斥不难得到 旋转木马问题:8个小孩围坐在旋转木马上,问有多少种变换座位的方法,使得每个小孩前面坐的都不是原来的小孩?分析:其实做法跟上面的方法一样,只是注意这里是换排列,那么总数就应该是7!,得到结果为: 棋盘多项式:
2013-08-12 18:26:35 9484 1
原创 容斥原理与多重集合
问题一:多重集合的组合问题 问题描述:给定3个a,4个b,5个c,现在要选10个元素,求一共有多少种组合? 分析:本问题就是相当于求S={3·a,4·b,5·c}的10组合数。首先,多重集合的组合有一个定理,定理描述如下:设S是有k种类型对象的多重集合,每种元素均具有无限的重复数,那么S的r组合的个数等于: 那么既然这样,我们令S∞={∞·a, ∞·b,∞·c},那
2013-08-12 14:56:44 6432 1
原创 HDU4577(2013年ACM杭州赛区邀请赛B题)
题目:X-Boxes import java.math.BigInteger;import java.util.*;public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); long[] f = new long[30];
2013-08-10 18:06:55 2362
原创 HDU4622(后缀自动机)
题目:Reincarnation题意:给定一个字符串,然后再给定Q个询问,每个询问是一个区间[l,r],问在这个字符串区间中有多少个不同的子串。后缀自动机模版题:#include #include #include #include #include using namespace std;const int N=5010;struct Sta
2013-08-09 11:34:07 3164 2
原创 HDU1588(矩阵连乘求和)
题意:已知g(i)=k*i+b,然后求,F(n)是Fibnacci数列,k,b,n,M是题目给定的。分析:我们可以认为,其中那么就可以有:那么我们就可以先快速幂计算出 AND ,然后再二分求和就可以了。
2013-08-09 10:29:26 1630
原创 BZOJ2831(小强的金字塔系列问题--区域整点数求法)
题目:2831: 小强的金字塔题意就是给出A,B,C,R,L,然后求这里其实用到扩展欧几里德。(基本上参照clj的解题报告才理解的)分析:我们先来分析一般情况:这里我们假设A我们令:,所以上式就等价于:,如果,那么的值是1,否则为0然后我们交换顺序:,由于,所以推导过程:因为,所以,
2013-08-07 15:08:04 2557
原创 离散对数(关于方程x^A=B(mod C)的解)
求方程:的解个数分析:设,那么上述方程解的个数就与同余方程组:的解等价。设同于方程的解分别是:,那么原方程的解的个数就是所以现在的关键问题是求方程:的解个数。这个方程我们需要分3类讨论:第一种情况:对于这种情况,如果方程的某个解设为,那么一定有,可以得到,即所以方程的解个数就是:,也就是第二种情
2013-08-05 16:11:07 6796 2
原创 NEFU705(数论+DP)
题目:Heap#include #include #include using namespace std;typedef long long LL;const int N=1001000;const int MOD=20000003;LL dp[N];void extend_Euclid(int a,int b,int &x,int &y){ if(
2013-08-04 19:47:43 1132
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人