自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lazier’s blog

物生心,心映物,如此纷纷扰扰.

  • 博客(109)
  • 收藏
  • 关注

原创 表达式求值

#include#include#include#include#include#includeusing namespace std;templateclass expCal{ public: expCal(){ expMid.clear();expSuffix.clear();} expCal(string s){ expCal();

2013-10-06 18:10:55 751

原创 其他的资料连接

搜索引擎简介:点击打开链接

2013-09-16 11:44:19 821

原创 hdu 4686 (等比解法)

这题的正解是矩阵快速幂,但是在比赛的时候没有构造出矩阵,然后直接用数学的方法把这题ac了,方法如下:可以得出an和bn都是类等比数列,类等比数列暂且定义为等比数列之间的加减乘除组合后的数列,an,bn如下:an=A0*Ax^n+Ay*(Ax^(n-1)+Ax^(n-2)+......+Ax^1+Ax^0).(n>=1)bn=B0*Bx^n+By*(Bx^(n-1)+Bx^(n-

2013-08-22 12:53:38 812

原创 hdu 4680(splay tree)

解题思路:   第一种操作,用小集合暴力插入到大集合,可以证明总的时间复杂度O(n*logn);   第二种和第三种操作,每次操作O(logn)   第四种操作,因为任意3个数不能组成一个三角型,则就是长边大于剩下的两边之和,和斐波那契数列类似,   所以对于10^9的数据范围来说只有几十个,用贪心的思路,从最小的开始,暴力二分查找即可。   第五种操作,因为一个区间的gcd值

2013-08-17 19:29:24 1006

原创 hdu 4667(几何)

解题思路:求出所有可能在外围的点。也就是将两圆两两求外公切线,得到所有的切点;将圆和三角形的三个点依次做切线,也得到切点,再加上所有三角形的三个点。最后对这些点求凸包,对于凸包上的每条边,如果它们在同一个圆上,用相应的圆弧替代。#include#include#include#include#include#include#include#include#inclu

2013-08-15 13:15:39 1059 2

原创 hdu 3547(Polya计数)

//根据Polya计数的原理,我们先要求出每个置换群中的循环的个数//这里有24个置换群,为什么是24个了,很容易想到,把每一个面当作正面并按一个方向(顺时针或逆时针)旋转4次,总共6个面,所以就是24个置换群了;//我们可以先对立方体的8个顶点编号,然后就可以暴力预处理出24置换群的循环个数了,最后就是用Polya的计数公式计数了,代码如下:#include#include

2013-08-13 13:20:34 787

原创 自己实现用FFT加速多项式计算

/* * FFT之所以能加速DFT的计算,得益于n次单位复数根的几个性质: * 1.消去引理  w(d*n,d*k)=w(n,k); * 1.折半引理  w(n,k)^2=w(n/2,k); * 2.求和引理,即:sum{w(n,k)^j}=0 (0 * 详见:算法导论第30章,p527~p535*/#include#include#include#include

2013-08-12 14:45:42 1613

原创 hdu 4622(后缀自动机|后缀数组)

//昨天晚上一直用后缀数组来写,怎么写都超时,今天看了多校3的官方解题,然来是卡常数;//今天上午就去学习了缀自动机(以前没有主动去学后缀自动机,以为后缀自动机能解的,后缀数组都能解,这次尝到了苦头);//这题官方解题说可以O(n^2)+O(1),可是我写的后缀自动机时间复杂度还是O(n*q),因为每次计算字串的个数的还是把所有的step遍历了的一遍,但是没事重新建树,建树的常数小了一些;

2013-07-31 16:37:03 1876 4

转载 zoj 题型分类

简单题#1001 -____-b  A+B。#1110 Dick and Jane 胡乱枚举收缩一下情况就可以了。#1115 a[i+1] = a[i] 的全部数位上的加起来,直到剩下一个,直接模拟。#1414 太弱太弱,按照模 4 分类讨论一下即可。#1713 简单的字符串截取和字符计数。#1716 简单的二维数组区间求和,作累加,然后容斥一下;预处理 O(W*H),查询

2013-07-26 10:17:58 2141

原创 图论知识点记录

//此知识点记录一下学习的思路:比较经典的题目了,首先按照边权分离边,从小到大添加进树中,可以知道相同边权的边形成的联通分支是一样的,所以在上一次操作存留下来的图中对每种边权先求一次生成树,记录哪些联通分支被连起来了,再按照这些联通分支进行构图,求这个图中不同的生成树的个数,这一步按照Kirchhoff定理求幺模矩阵的秩就可以了原博客:http://hi.b

2013-07-23 11:30:49 857

原创 hdu 湫秋系列故事——安排座位(组合dp)

/* * 以前比赛的时候做这题,一点思路都没有,后面就放了放; *  * 今天突然想来弄下这题,于是去拜访了大牛的博客,了解到了组合dp的解法 *  * 解法如下: 首先我们令F[i][j]表示前i个系的所有学生坐在座位上,出现了j对相邻学生是同一个系的 *  * 那么对于接下来一个系的a个学生,我们可以把这个系的学生插入前面出现的j对相邻学生的中间,从而使他们变得不相

2013-07-22 16:29:15 1098

原创 hdu 3939 (Sticks and Right Triangle)

//数论(勾股数组相关),在acdream 群里看到的实现代码如下:#include#include#include#includeusing namespace std;vector fac[1000001];int prime[100000],phi[1000001],m;void init(){ //预处理phi[] int i,j; m=0

2013-07-22 13:29:06 893

原创 几何代码总结

struct Point{ int x,y; Point(int a=0,int b=0):x(a),y(b){}};Point operator-(Point a,Point b){ return Point(a.x-b.x,a.y-b.y); }Point operator+(Point a,Point b){ return Point(a.x+b.x,a.y+b.y)

2013-07-12 20:21:26 980

原创 zoj 1030 (dfs+几何)

//从每一个点开始,向某一个几何方向dfs搜索几何圈,然后判断几何圈里有没有其他的点,再把几何圈去重就是答案,O(n^3).#include#include#include#include#include#includeusing namespace std;struct Point{ int x,y; Point(int a=0,int b=0):x(a),

2013-07-12 20:04:15 904

原创 hdu 1625(flyd判正环)

//自己能到自己,则表示这个点在环上;#include#include#includeusing namespace std;int mat[31][31],n,m;int main(){ int a,b,i,j,k,cas=0; while(scanf("%d",&m)!=EOF) { memset(mat,0,sizeof(ma

2013-07-11 21:05:23 871

原创 hdu 3666 THE MATRIX PROBLEM(判负环)

解题思路:(U,L,mat[i][j])>0;因为题目要判定 L因为减号具有传递性(比如a-b=5,b-c=5由传递性得a-c=10),因为图即具有传递性(可以求出一颗最短路径树的图),又具有矛盾性(负环,下面会详细介绍),我们就可以把它抽象成图来判定判定负环log(ai)-log(bj)log(L/mat[i][j])=-log(U/mat[i][j]);如果

2013-07-10 19:29:28 732

原创 CodeforcesRound#191(Div.2)

A题:直接枚举#include#includeint A[110],c[110];int main(){ int n,i,j,ans,sum,x; while(scanf("%d",&n)!=EOF){ sum=x=0; memset(c,0,sizeof(c)); for(i=1;i<=n;i++) scanf("%d",&A[i]); f

2013-07-05 11:10:00 865 2

转载 ACM-ICPC 2013 World Finals 简单题解

原博客地址:http://jiazhipeng.byethost7.com/archives/268

2013-07-04 23:23:20 1984

原创 hdu 4328 (悬线法+dp)

悬线法用于求解最大子矩阵问题,资料详见:这篇论文对于red-and-blue crisscross 方阵可以用dp,既可以用合并两个小方阵得到一个大方阵,合并过程如下图: 我们可以把两个绿色的3*3小方阵合成一个4*4大方阵,只要符合color[i][j]!=color[i-1][j]&&color[i][j]!=color[i][j-1]&&color[i][j]==color[

2013-07-02 14:10:46 939

原创 hdu 4483(数论)

/*  这是一个经典的题目,以前遇到n范围都比较就小,可以直接枚举每一个长方形的两个对角点,最后答案就是  C(n*n,3)-2*n*C(n,3)-2*sum{sum{(n+1-i)*(n+1-j)*(gcd(i,j)-1)}}(1    然而这题的n范围比较大,直接枚举肯定不行,但是我们可以优化上面的这个公式;    第一次看到这题的时候,不会优化,到后面我做了下uva1

2013-06-30 23:06:18 944

原创 2sat 题目练习

2sat 问题的练习这个博客收集很多:http://www.cnblogs.com/ambition/archive/2011/07/30/2-sat.html  hdu 3062:裸的,(基本的2选一,限制的2选1,如果能在限制的条件下实现基本的2选1表示题目有解),代码如下:#include#includestruct E{ int t,next;}edge

2013-06-30 14:48:57 742

原创 ZOJ 3717 Balloon (2sat+二分)

这题是一个二分半径+判定的题,但是开始不知道怎么去判定,以前听别人提起过sat问题,感觉这题是一个2sat模型,因为有一些限制比如:同一组两个里面只能选一个,两个球重叠时只能选其中的一个等,这很符合2sat的模型,于是去翻了下白书上2sat问题的解法实现,建图后直接用搜索判定,我用这种方法写了写,开始提交wa了几次,wa的原因是:题目说在round之后也要保证不重叠,那就只有舍掉小数点3位以后的数

2013-06-30 13:45:33 1488

原创 Codeforces Round #190 (Div. 2)

A题:直接输出就好了,除了最后一个人不能跳外,其他的每个人first time dancing一次,总共可以跳 n+m-1次,代码如下:#include#includeint main(){ int n,m,i; while(scanf("%d%d",&n,&m)!=EOF) { printf("%d\n",m+n-1); for

2013-06-29 19:16:45 756

原创 函数式线段树(主席树)学习实践spoj10628

//count the tree/*思路:每个点建立一颗线段树(增量建立),以遍历的时间为序,充分利用上一颗线段树的信息,在这题上一颗线段树就是父节点的线段树,因为我们每次更新的信息只有一个节点,一个节点被更新了,那么它的所有祖先节点也要相应的被更新,又因为在线段树中一个节点的祖先节点数不会超过(logN)个,所以这颗线段树和上一颗线段树大部分节点是一样的,只有刚刚说的logN个节点被改变

2013-06-04 21:40:30 1158

原创 以前写的AVL树实现map练习

AVL树的资料见这:http://blog.csdn.net/laziercs/article/details/8280074实现代码(范型模版实现方式,若有不妥的地方,请大家广言):#include#include#includetemplate struct Type{ Tk key; Tv val;};template Type makepair(T

2013-06-04 19:38:31 1078

原创 2013金山西山居初赛第一场(hdu4545-hdu4547)

A题:用短串去长串里里面找自己(找的时候把字符转换一起考虑),找到就是happy;代码:#include#includeint mat[30][30];char s[1100],str[1200],a[3],b[3];int main(){ int cas,m,i,cass; scanf("%d",&cass); for(cas=1;cas<

2013-05-17 22:17:00 919

原创 hdu 4486 Pen Counts

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4486 题目大意:    把一个长度为n的绳子分成三段,用这3段绳子组成三角形,问有多少个不同的三角形  如果一个三角形的三边都不相等,可以算两次,其它的情况算一次; 解题思路:  假设一个三角形的三条边长为a,b,c,且a  这样我们可以枚举三角形的a边,再求在a边确定情况

2013-05-05 22:03:51 1130 2

原创 xmu网宿科技杯 厦门大学第四届程序设计积分赛 第四场

A题:题目链接:http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1465 题目描述:  将含有n个整数的数列A中的所有整数重新从小到大排序以后得到的新的数列B, 满足,   对于任意正整数i, j(1   个整数列C, 你需要求出将其变为连续数列所需花费的最小代价和。(将整数x变为整数  y需要花费|x - y|的代价, 所

2013-05-05 21:26:19 2475 2

原创 第十一届北京师范大学程序设计竞赛解题报告

A题:模拟#include#include#include#include#includeusing namespace std;int main(){ int i,n,cas; vector month[15]; month[11].push_back("Basic Training"); month[12].push_back("Basic

2013-04-30 21:42:38 1068

原创 2013 福州大学第十届程序设计竞赛

A题:中学物理题,直接求就好了;#include#includeint main(){ __int64 cas,s,h,vx,vy; scanf("%I64d",&cas); while(cas--) { scanf("%I64d%I64d%I64d%I64d",&s,&h,&vx,&vy); vx=s

2013-04-29 22:12:40 1480 9

原创 自己写的splay模板

#include#include#includeusing namespace std;#define N 300010const int INF=1<<30;int tree[N][2],pa[N],cnt[N],rev[N],val[N];int Max(int a,int b){ return a>b?a:b; }class splaytree{ public: i

2013-04-28 09:26:05 814

原创 DLX 模板

//以hust1017为例#include#include#define N 1100#define M 1100#define V N*M#define INF 100000000int D[V+1],U[V+1],L[V+1],R[V+1],C[V+1],mark[V+1];int S[M+1],H[N+1];void remove(int c){ int i,j

2013-04-18 21:52:40 772

转载 最小 k 度限制生成树

原文地址:http://blog.163.com/surgy_han/blog/static/2079912702012112884113774/所谓最小 k 度限制生成树,就是指有特殊的某一点的度不能超过k时的最小生成树。简单思想:设特殊的那点为v0,先把v0,删除,求出剩下连通图的所有最小生成树,假如有m棵最小生成树,那么这些生成树必定要跟v0点相连,也就是说这棵生成树的v0点

2013-04-06 09:58:42 930

原创 ZOJ3690Choosing number

/*题目:Choosing number题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3690题目大意:n个人站成一行,这儿有m个数字,1,2...m,每个人选择一个数字,但是如果相邻的两个人选择了同一个数字这个数字不能超过k,请问他们有多少种选择数字的方式?    解题思

2013-04-02 20:00:11 764 2

原创 ZOJ 3691 Flower

/*题目: Flower题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4974题目大意:   三维空间中有n个点,序号为1-n,每个点有一个坐标,每个点上有F[i]朵花,每个点只允许L[i]朵花从这个点转移出到别的点,每两个点之间的距离为欧几里得距离,现在Gao的女朋友要把序号2-n点

2013-04-02 19:13:05 1180

原创 hdu4533-威威猫系列故事——晒被子

/*把(0,0),(t,t)看成是一个大矩形的话,那么这个大矩形的右上坐标x是等于y的,有了这个就好办了,我们可以维持一颗关于t的线段树,比如现在对一个X矩形(x1,y1),(x2,y2)来说如果t>=Max(x2,y2),那么这个面积直接加上;在关于t的这颗线段树上操作也就是相当于更新(Max(x2,y2)~Max(t))这个区间,而对于(0~MAx(x1,y1))这个区间是无影响的

2013-03-29 21:54:29 3515 4

转载 左偏树的讲解

//本文转自:这里2.1.2 可并堆的定义可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum, Delete-Min),还支持一个额外的操作——合并操作:H ← Merge(H1,H2)Merge( ) 构造并返回一个包含H1和H2所有元素的新堆H。 O(n),用它来实现可

2013-03-27 17:20:05 1201

转载 base64 编码解码(来自我同学)

base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于26=64,所以每6位为一个单位,对应某个可打印字符。三个字节共24位,对应于4个base64单位,即3个字节需要用4个可打印字符来表示。它常用来作为电子邮件的传输编码。在base64中的可打印字符包括大写英文字母A-Z,小写英文字母a-z、阿拉伯数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同,通常用加号

2013-03-25 12:11:01 1326

原创 矩阵快速幂

void mult(int a[2][2],int b[2][2]){ int i,j,k,c[2][2]={0,0,0,0}; for(i=0;i<2;i++) for(j=0;j<2;j++) for(k=0;k<2;k++) c[i][j]=(c[i][j]+(a[i][k]*b[k][j])%mod)%mod; for(i=0;i<2;i++)for(j=0;j<

2013-03-23 23:03:41 665

原创 hdu 3308 LCIS

/*题型:线段树;解题思路:    在线段树的节点上保存lmax,rmax,max三个值,lmax表示从该节点左端点数递增的最长长度,rmax表示终点是该节点的右端点的最长长度,max表示该区间的最长长度更新就是:如果左孩子的右端点小于右孩子的左端点,那么就合并左孩子rmax和右孩子的lmax;查询时和更新相似; 代码如下:*/ #include#inclu

2013-03-17 18:05:29 579

空空如也

空空如也

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

TA关注的人

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