自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 收藏
  • 关注

原创 Goodbye ACM/ICPC!

区域赛打完有一阵子了,感觉心里没着没落的,总感觉没画完句号,一边深知自己已是退役狗,一边又感觉自己随时可以开始做题,真想继续下去啊,但是时间已经不允许了。天下无不散之宴席,也到了说再见的时候了。两年前,当我踏入这个学校的时候,感觉自己已经GG的时候,听说了有实验室这个地方,当时怀着一腔热血感觉自己会去数据库的时候,不知道怎么就填了ACM实验室,虽然我已经记不清面试的时候的样子,隐约记得有掉毛学长,泽

2016-11-24 02:07:32 645 2

原创 BZOJ 4568: [Scoi2016]幸运数字

题意: A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一。每座城市都有一个 幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征。一些旅行者希望游览 A 国。旅行者计划 乘飞机降落在 x 号城市,沿着 x 号城市到 y 号城市之间那条唯一的路径游览,最终从 y 城市起飞离开 A 国。 在经过每一座城市时,游览者就会有机会与这座城市的幸运数

2016-11-04 19:33:14 557

原创 BZOJ 4569: [Scoi2016]萌萌哒

这里考虑如果只有一个限制条件 可以暴力跑l1~r1,用并查集合并l1+i和l2+i 然后找剩下来的块数 这里有多个限制条件,所以我们把l1~r1区间看做一个点, 然后像RMQ一样倍增的思想慢慢拆分,然后用并查集合并 一共最多合并ologn次 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>

2016-10-27 21:25:11 293

原创 HDU 5296 Annoying problem dfs序+lca

题意: 给你一棵树,然后你有一个空的集合,能对集合进行两个操作 1.添加一个点到集合内 2.删除一个点从集合内 输出集合内的点按lca来连接出来的树形图的权值和思路: 没思路…..QAQ get一个公式就是在树上求点到链的公式 就x到链(u,v) Dis=dis[x]-dis[lca(x,u)]-dis[lca(x,v)]+dis[lca(u,v)] 它确实是对的,但是我没有推出来

2016-09-13 16:37:52 365

原创 HDU 5293 Tree chain problem dfs序+树形dp

题意: 在树上给出一些链,链上有权值 求一个最大的链集合的权值和,集合内的链不相交 思路: 把每条链的状态放到lca(u,v)上,然后进行树形dp dp[u]有两种状态 1.不取链 dp[u]=∑dp[Son[u]] 2.取一个lca(x,y)==u的链加上 因为要取这条链,所以我们应该减掉子树上取了相交的链多加的值 因为点有点多,而且对于链操作 很容易想到dfs序或者树剖(

2016-09-13 16:30:02 300

原创 后缀自动机1003 HDU 4416

题意: 给一个模式串,然后给n个匹配串,问模式串里有多少个子串是n个匹配串里都不存在的 思路: 就是注意一个性质就行了 假设当前节点的len==6,当前节点的pre节点len==2 这个节点接收的状态就是以当前节点为最后一个字符的后缀的长度是3~6里 比如当前节点的最长后缀是abcabb(sam.len==6),pre节点是b(sam.len==2) 那么当前节点的接收子串是a

2016-08-08 09:55:55 309

原创 后缀自动机1002 SPOJ NSUBSTR

题意: 求长度为i的最多的出现次数 思路: 对于Sam上的每个节点保存匹配串的最长匹配长度 然后再传给父亲节点就行了 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<stri

2016-08-08 09:55:00 340

原创 SPOJ LCS2 后缀自动机

题意: 求多个串的LCS 思路: 跟上题一样的东西…. 只不过多加一个临时的dp数组来保存所有的状态的最小值 然后求所有子串的最大值就好了#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#i

2016-08-08 09:54:16 224

原创 后缀自动机1001 SPOJ LCS

题意: 就是求LCS 思路: topsort后 每个父亲节点加上子节点的状态就行了吧 至于为什么传给父亲节点 这里Sam里的每个节点有个性质 假设当前节点的len==6,当前节点的pre节点len==2 这个节点接收的状态就是以当前节点为最后一个字符的后缀的长度是3~6里 比如当前节点的最长后缀是abcabb(sam.len==6),pre节点是b(sam.len==2) 那么

2016-08-08 09:53:28 264

原创 UVA 11806 容斥原理

题意: 往一个n*m的方格里放k个石块,问有多少种方式 最后一行,最后一列,第一行,第一列必须放至少一个 思路: 简单容斥一下 最后一行不放为事件r1,最后一列c1,第一行r2,第一列c2 全部情况-c1-c2-r1-r2+c1*c2+r1*r2+c1*r1+c1*r2….. 二进制枚举一下,奇加偶减 #include<stdio.h>#include<string.h>#inc

2016-08-08 09:52:21 214

原创 容斥原理1005 POJ 2773

题意: 求第k个与m互质的数 思路: k可能很大,Ans可能>m 我们可以二分1~mid与m互质的数的个数>=k 然后就是比较简单的容斥了 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>

2016-08-08 09:51:45 219

原创 容斥原理1004 POJ 1091

题意: Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。 一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。 节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。 其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。 跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。 而他最终的任务是跳到距离他左边一个单位长度的地方,

2016-08-08 09:51:06 265

原创 容斥原理1003 HDU 2204

题意: Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别, 他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣。 这些特殊数是这样的:这些数都能表示成M^K,M和K是正整数且K>1。 正当他再度沉迷的时候,他发现不知道什么时候才能知道这样的数字的数量, 因此他又求助于你这位聪明的程序员,请你帮他用程序解决这个问题。 为了简化,问题是这样

2016-08-08 09:50:26 405

原创 容斥原理1002 HDU 1796

题意: 给一个m大小的数的集合,让你求另外一个集合 集合里的数都 < n,集合里的数都是给的集合的某个数的倍数 问你求的这个集合的最多数量 思路: 求小于n的数并且是t的倍数的个数是(n-1)/t 把每个数都看做一个事件,就求出来(n-1)/A[i] 然后减去两个事件相交的数量,-(n-1)/lcm(A[i]*A[j]) 然后加上三个事件相交的数量,+(n-1)/lcm(A[i]*

2016-08-08 09:49:41 268

转载 杭电。刘春英。老师 写给计算机软件专业的大学生

首先说一说进入计算机专业的目的,我个人是因为十分喜欢IT业,很喜欢折腾电脑,所以在填报志愿是毫不犹豫的在报了的所有的学校都填写的计算机专业,梦想着进入计算机专业后能遇见很多高手,能交到几个知己,谁之进来后却大失所望。计算机专业的学生有很多以前对计算机不怎么了解,而且还有部分人进大学前连计算机摸都没摸过,对计算机很熟悉的很少,高手更是凤毛麟角,大多数人是服从了父母之命,显而易见,目前社会最热的行业是I

2016-08-04 12:48:27 1170

原创 容斥原理1001 HDU 2841

题意: 有n*n的格子,问你从(0,0)能看到多少个点 从x点-y点上没有其他点就代表从x能看到y点 思路: 就是求gcd(x,y)==1的对数 遍历x,然后通过寻找与gcd(i,y)!=1的对数来得到答案 gcd(i,y)!=1 y<=n 对i进行素因子分解 i=p1^e1 * p2^e2 * p3^e3 * … pk^ek Ans+=m/p1+m/p2+…m/pk-m/(p1*

2016-08-02 22:56:03 265

原创 莫比乌斯反演1006 HDU 4675 好题 推荐

题意: 给一个长度为n的数组,每个数<=m,从中选出k个数 改变k个数变为数组bi 求gcd(bi)==(1~m)的方案数 思路: 求gcd的对数 Ans=∑f(d) f(d)是gcd(bi)==d的方案数 F(d)是d|gcd(bi)的方案数 p=ai数组里拥有d因子的数的个数 F(d)=C(p,k-(n-p))((m/d)-1)^k-(n-p)(m/d)^(n-p) 因为

2016-08-02 15:47:44 296

原创 莫比乌斯反演1005 HDU 4746 好题 推荐

题意: 求gcd(x,y)的质因子的个数<=p的对数 思路: Ans=∑(1<=i<=n, f(i)) (f(i)是gcd(x,y)==i的个数 =∑(1<=i<=n, ∑(i|d,mu(d/i)*F(d)) ) (F(i)是i|gcd(x,y)的个数 =∑(1<=i<=n, F(i) * ∑(d|i , mu(d)) ) 由于有ok(i)的存在,我们要对预处理多加一个维度

2016-08-02 13:36:21 274

原创 HDU 1695

题意: 对于给出的 n 个询问,每次求有多少个数对 (x,y) , 满足 a ≤ x ≤ b , c ≤ y ≤ d , 且 gcd(x,y) = k , gcd(x,y) 函数为 x 和 y 的最大公约数。 (x,y)和(y,x)算一对 思路: 跟BZOJ 2301差不多 减去重复的对数,就是n和m的区间交的区间 #include<stdio.h>#include<string.

2016-08-02 13:35:26 260

原创 莫比乌斯反演 1004 BZOJ 2301

题意: 对于给出的 n 个询问,每次求有多少个数对 (x,y) , 满足 a ≤ x ≤ b , c ≤ y ≤ d ,且 gcd(x,y) = k , gcd(x,y) 函数为 x 和 y 的最大公约数。 思路: Ans(a~b,c~d)=Ans(b,d)-Ans(a-1,d)-Ans(b,c-1)+Ans(a-1,c-1) 求gcd(x,y)==k&& x<=n&&y<=m ==

2016-08-01 22:30:26 247

原创 BZOJ 2190

题意: 作为体育委员,C君负责这次运动会仪仗队的训练。 仪仗队是由学生组成的N * N的方阵, 为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方, 根据其视线所及的学生人数来判断队伍是否整齐 现在,C君希望你告诉他队伍整齐时能看到的学生人数。 思路: 观察一下图 就是去掉第一行和第一列,然后求gcd=1的对数 #include<stdio.h>#include<strin

2016-08-01 19:59:24 209

原创 莫比乌斯反演1003 SPOJ VLATTICE

题意: 有一个n*n*n的格子,这个格子是(0~n,0~n,0~n)的 从x点能看见y点,代表从x到y连线上没有其他点 问从(0,0,0)能看到多少个点 思路: 之前有个能量收集那道题跟这道题差不多… 考虑gcd(x,y,z)=1 但是这道题要考虑一些特殊情况,有0的存在 假设x,y,z都!=0,Ans1=∑(1<=T<=n,mu(T)(n/T)(n/T)*(n/T)) 假设x,

2016-08-01 19:58:29 208

原创 莫比乌斯反演1002 BZOJ 2005

题意: 栋栋有一块长方形的地,他在地上种了一种能量植物, 这种植物可以采集太阳光的能量。在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起。 栋栋的植物种得非常整齐,一共有n列,每列有m棵,植物的横竖间距都一样, 因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范围是1至n, 表示是在第x列,y的范围是1至m,表示是在第x列的第y棵。

2016-08-01 19:57:27 385

原创 莫比乌斯反演1001 BZOJ 2818 莫比乌斯反演例题

题意: 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. 思路: 可以欧拉函数解,比较简单,为了练习一下莫比乌斯反演 很多解释都在代码里面了,这道题基本上就是例题… /**/#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.

2016-08-01 19:56:21 923

原创 BZOJ 2705 欧拉函数

题意: Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。 现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。 思路: ∑gcd(i,N) =∑(d|n,phi(n/d)) ->然后枚举每一个n的因子求phi(n/d)就好了,时间复杂度…估计不出来… #include<stdio.h>#include<string.h>#include

2016-08-01 19:51:37 266

原创 FZU 1911 矩阵快速幂

题意: 给一个n,让你输出一个S(n)*S(n)的矩阵 S(n)是前n项斐波那契的和%m 这个矩阵必须满足每一行和每一列中任意两个的和不能相等 思路: 奇数肯定是无解的,因为奇数总有一行是相同的 偶数的情况,自己打个6*6和4*4的表就看出来规律了 就是把整个矩形分成三部分,左上部分和右下部分和从右上角到左下角的分界线 然后发现左上部分全是1,右下部分全是-1,分界线前n/2个是0

2016-07-27 18:25:11 314

原创 矩阵基础1010 UVA 11651 矩阵快速幂+DP 好题,推荐

题意: 问你分数为score的base进制的数有多少种 这个数必须满足相邻的数不相同而且没有前导零 分数是相邻的数的差的平方的和 思路: dp[i][j]是分数为i时,以j结尾的数的个数 然后我们发现 每个dp[i][j]只被dp[(i-(base)*(base))~(i-1)][0~base-1]影响 我们就把这个区间里的数全部弄进矩阵里,就可以加速计算 时间复杂度大概是 O

2016-07-27 18:24:46 336

原创 UVA 10518

题意: F(0)=0,F(1)=1; F(n)=F(i-1)+F(i-2) 假设F(n)是一个函数,求调用函数的调用次数 思路: 很明显F(0)=F(1)=1; F(n)=F(i-1)+F(i-2)+1 然后矩阵快速幂… #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#includ

2016-07-27 12:44:29 75

原创 CodeForces 385E

题意: 有一个熊在n*n的森林里,初始位置在(sx,sy),每个位置都有growing raspberry 每个growing raspberry初始高度是x+y 然后每秒会先发生速度变化,假设当前位置是(x,y) t=growing raspberry的高度 速度会从(vx,vy)->(vx+t,vy+t) 然后发生位置变化(x,y)->((x+vx-1)%MOD+1,(y+vy-

2016-07-27 12:43:00 245

原创 矩阵基础1009 CodeForces 392C 好题,超级推荐

题意: F[1]=1,F[2]=2,F[n]=F[n-1]+F[n-2] A[i]=F[i]*i^k 思路: (n+1)^k=sigma(C(k,i)*n^i)|0<=i<=k(牛顿二项式 F[n+1]*n^k=F[n]*n^k+F[n-1]*n^k =sigma(F[n]*C(k,i)*n^i)|(0<=i<=k)+sigma(F[n-1]*C(k,i)*n^i)|(0<=i<=k)

2016-07-27 12:42:20 336

原创 矩阵基础1008 UVA 11885

题意: 给出p,求出最小包围的矩形的周长为p的形状的个数,不包括矩形 思路: 发现如果包括矩形的话,这个个数就是一个斐波那契序列 然后就先求出来包括矩形的,然后再减去就行了 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#

2016-07-27 12:41:33 353

原创 矩阵基础1007 UVA 11149

题意: 给一个矩阵A和K,求出A^1+A^2+….A^k 思路: 用倍增法来把时间复杂度降低到log(k)*n^3 F(5)=A^1+A^2+A^3+A^4+A^5=F(2)*(E+A^2)+A^5(E是单位矩阵 F(n)=F(n/2)*(E*A^(k/2))+n%2?A^k:0; #include<stdio.h>#include<string.h>#include<iostream

2016-07-27 12:40:46 195

原创 矩阵基础1006 HDU 4549

题意: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 求F(N) 思路: 没有直接构造出来矩阵,就把乘法转化成了幂的加法 然后就比较容易构造矩阵了 F(n)=F(n-1)+F(n-2)+1 注意一点是取模的时候因为是指数取模,所以MOD 1e9+6 1e9+6=phi(1e9+7) 这里是欧拉函数的知识 #includ

2016-07-27 12:39:38 87

原创 矩阵基础1005 HDU 4686

题意: 求sigma(ai*bi)|0<=i<=n-1 a(i)=a(i-1)*Ax+Ay b(i)=b(i-1)*Bx+By 思路: a(i)*b(i)=(a(i-1)*b(i-1)*Ax*Bx)+(a(i-1)*Ax*By)+(b(i-1)*Bx*Ay)+Ay*By 然后构造矩阵就好了 矩阵A a(i-1),b(i-1),a(i-1)*b(i-1),1,Sum 矩阵B Ax

2016-07-25 20:18:01 224

原创 矩阵基础1004 HDU 5015

题意: 矩阵的第一行是 23 233 2333 23333….. 给出n*m矩阵的第一列,其他都满足F[i,j]=F[i-1,j]+F[i,j-1] 求F[n,m] 思路: 我们对于每行进行推导,发现一些规律 F[0]=F[0]*10+3 F[1]=F[1]+F[0]*10+3 F[2]=F[2]+F[1]+F[0]*10+3 …. 这样,我们就能搞出来一个n+2*n+2的矩阵

2016-07-25 20:17:20 226

原创 矩阵基础1003 HDU 4965

题意: 给一个n*k的A矩阵和k*n的B矩阵(k<=6,n<=1000) 求(A*B)^(n*n),对于该矩阵的每个元素MOD6的和 思路: 一般方法在求幂的时候肯定会TLE 这里我们考虑拆分(A*B)^(n*n) ->(A*B)(A*B)^(n*n-2)(A*B) ->A*(B*A)^(n-1)*B 矩阵满足结合律 然后这样就可把A*B的1000*1000矩阵转化成

2016-07-25 20:16:33 202

原创 矩阵基础1002 CodeForces 450B

题意: F[i]=F[i-1]+F[i+1] 求F[n] 思路: F[i+1]=F[i]-F[i-1]->F[i]=F[i-1]-F[i-2] 然后矩阵快速幂去做 这道题有些特殊性,简单推导一下就会发现 每6次一个循环,打个小表就行了 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm

2016-07-25 20:16:00 224

原创 矩阵基础1001 HDU 4990

题意: 给出n,求出ans 思路: 既然奇数和偶数的推导公式不一样, 那就把奇数偶数都弄到一个矩阵里,这样就能统一推导了 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<st

2016-07-25 20:15:28 324

原创 数论基础1013 POJ 2478

题意: 给一个n,求出F(n) 思路: 就是求sigma(g(i))|1<=i<=n f(i)表示与i互质的数的个数 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<str

2016-07-25 20:13:52 284

原创 数论基础1012 POJ 1061 模线性方程

题意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。 它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。 可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。 不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。 但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。

2016-07-25 20:13:16 251

空空如也

空空如也

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

TA关注的人

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