
数学
humeay
这个作者很懒,什么都没留下…
展开
-
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 · 253 阅读 · 0 评论 -
BZOJ 2190
题意: 作为体育委员,C君负责这次运动会仪仗队的训练。 仪仗队是由学生组成的N * N的方阵, 为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方, 根据其视线所及的学生人数来判断队伍是否整齐 现在,C君希望你告诉他队伍整齐时能看到的学生人数。 思路: 观察一下图 就是去掉第一行和第一列,然后求gcd=1的对数 #include<stdio.h>#include<strin原创 2016-08-01 19:59:24 · 262 阅读 · 0 评论 -
莫比乌斯反演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 · 236 阅读 · 0 评论 -
莫比乌斯反演1002 BZOJ 2005
题意: 栋栋有一块长方形的地,他在地上种了一种能量植物, 这种植物可以采集太阳光的能量。在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起。 栋栋的植物种得非常整齐,一共有n列,每列有m棵,植物的横竖间距都一样, 因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范围是1至n, 表示是在第x列,y的范围是1至m,表示是在第x列的第y棵。原创 2016-08-01 19:57:27 · 441 阅读 · 0 评论 -
莫比乌斯反演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 · 990 阅读 · 0 评论 -
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 · 339 阅读 · 0 评论 -
矩阵基础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 · 378 阅读 · 0 评论 -
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 · 108 阅读 · 0 评论 -
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 · 282 阅读 · 0 评论 -
矩阵基础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 · 385 阅读 · 0 评论 -
矩阵基础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 · 416 阅读 · 0 评论 -
矩阵基础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 · 231 阅读 · 0 评论 -
莫比乌斯反演 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 · 290 阅读 · 0 评论 -
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 · 301 阅读 · 0 评论 -
莫比乌斯反演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 · 304 阅读 · 0 评论 -
Codeforces Round #305 (Div. 2) 548E. Mike and Foam 容斥
题意: 给n和m,还有n个数m组操作 每个操作有一个x 一开始是一个空集合,如果x被插入过集合,就把x扔出来,否则插入集合。求集合里互质的对数。 思路: 维护一个ans,和num[val]数组代表val出现的次数,然后每次插入和删除通过容斥来更新ans#include<stdio.h>#include<string.h>#include<iostream>#include<algor原创 2016-05-20 02:18:41 · 297 阅读 · 0 评论 -
POJ 2773 Happy 2006 二分+容斥
占坑ing#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vector>#include<map>#include<set>using nam原创 2016-04-05 19:38:49 · 278 阅读 · 0 评论 -
HDU 4059 The Boss on Mars 容斥原理+逆元
占个坑~~~ 晚上回去补#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vector>#include<map>#include<set>us原创 2016-04-05 19:10:11 · 262 阅读 · 0 评论 -
容斥原理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 · 312 阅读 · 0 评论 -
容斥原理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 · 301 阅读 · 0 评论 -
容斥原理1004 POJ 1091
题意: Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。 一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。 节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。 其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。 跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。 而他最终的任务是跳到距离他左边一个单位长度的地方,原创 2016-08-08 09:51:06 · 302 阅读 · 0 评论 -
容斥原理1003 HDU 2204
题意: Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别, 他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣。 这些特殊数是这样的:这些数都能表示成M^K,M和K是正整数且K>1。 正当他再度沉迷的时候,他发现不知道什么时候才能知道这样的数字的数量, 因此他又求助于你这位聪明的程序员,请你帮他用程序解决这个问题。 为了简化,问题是这样原创 2016-08-08 09:50:26 · 467 阅读 · 0 评论 -
容斥原理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 · 259 阅读 · 0 评论 -
数论基础1011 UVA 11754 剩余定理+枚举
题意: 给C组数据,每组都满足的最小~第S小的数 每组数据有X,和k个R,如果N%X=任意一个R就表示满足这组数据 思路: 先用的CRT…TLE…(算了算…好爆炸的时间复杂度 如果是小数据的话,我们可以用CRT 如果是大数据就不行了, 因为数据很多,所以我们如果用枚举,随机到每个X[i]上的概率就比较高 我们可以找到最小的k[i]/X[i]来枚举t 因为可能数据弄出来不到S个,这时原创 2016-07-24 17:02:34 · 272 阅读 · 0 评论 -
HDU 5446 Unknown Treasure Lucas+CRT
题意:给n,m,k和p1,p2….pk 求C(n,m)%p1* p2* …. pk 思路:比赛的时候并没有学….. 就是LUACS+CRT模板题#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#原创 2016-04-08 19:57:47 · 371 阅读 · 0 评论 -
莫比乌斯反演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 · 342 阅读 · 0 评论 -
矩阵基础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 · 111 阅读 · 0 评论 -
矩阵基础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 · 258 阅读 · 0 评论 -
矩阵基础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 · 230 阅读 · 0 评论 -
LightOJ 1259
题意: 问有多少个素数对(a,b)满足a+b=n&&a<=b 思路: 素数筛一下就行了 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vec原创 2016-07-21 20:50:11 · 450 阅读 · 0 评论 -
LightOJ 1234
题意: 求sigma(1/i)|1<=i<=n 思路: 把询问排个序,然后for一遍就过… 好像有公式 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#in原创 2016-07-21 20:49:40 · 245 阅读 · 0 评论 -
基础数学1007 LightOJ 1236
题意: 给一个n,问有多少对lcm(i,j)=n|j>=i 思路: 因为要lcm==n,所以将n分解成质因子后 n=p1^k1 * p2^k2 * … pk^ek (i,j)之间至少有一个数分解后也有pi^ei,剩下一个数可以是0~ei 所以对于每一个p,都有2*ei+1种情况 然后因为除了(n,n)之外都重复了一遍,所以Ans++,Ans/=2 #include<stdio.h>#原创 2016-07-21 20:48:59 · 238 阅读 · 0 评论 -
基础数学 1002 LightOJ 1356
题意: 给你一个集合,找出最大的子集合, 该子集合里任意两个数x,y不能存在y/x=t,t是质数 思路: 因为是求最大独立集,所以容易想到二分图来建图 二分图左边放奇数个质因子的数,右边放偶数个质因子的数 然后如果y/x=t,t是质数,就把xy连边,一边二分图匹配就出来了 因为匈牙利的时间复杂度比较高,所以这里用Hopcroft-Carp 大概是O(sqrt(V)*E)#includ原创 2016-07-21 20:45:59 · 434 阅读 · 0 评论 -
基础数论 1001 LightOJ 1370
/* 题意: 给一个n个数,假设有数x ->求每个xphi(n)>=x最小的n的和 思路: 预处理一下phi(i) 然后先求出最小的Tab(i)代表phi(n)==i的最小的n 因为有些phi取不到,所以需要取后边的,随便写写就好了 */includeincludeincludeincludeincludeincludeincludeincludeincludeincludein原创 2016-07-21 20:45:09 · 299 阅读 · 0 评论 -
数论基础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 · 309 阅读 · 0 评论 -
数论基础1012 POJ 1061 模线性方程
题意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。 它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。 可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。 不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。 但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。原创 2016-07-25 20:13:16 · 306 阅读 · 0 评论 -
FZU 2020 组合 lucas
组合数取模的模板题 https://en.wikipedia.org/wiki/Lucas%27_theorem 这里有lucas的证明 说一下我对lucas的一点理解 lucas定理就是将C(m,n)分解为C(m1,n1)* C(m2,n2)* C(m3,n3)…….C(mk,nk) 其中m1+m2p+m3p^2+m3p^4+…..mkp^k=m n1+n2p+n3p^原创 2016-04-06 23:17:28 · 700 阅读 · 0 评论 -
HDU 2866 Special Prime 找规律
题意:称n和m为任意数的p,p为素数 满足等式的p为特殊的素数 求不大于L的特殊的素数的个数 思路: 根据下边的提示很容易想到 1=1^3 2=1^3+1^2 8=2^3 12=2^3+2^2 27=3^3 36=3^3+3^2 然后推下去,随便推导推导就能得到答案了 p=3 * i + 3 * i^2 +1 | i为正整数#include<stdio.h>...原创 2016-03-18 18:55:21 · 766 阅读 · 2 评论 -
HDU 2582 f(n) 数学
题意:求f(n)=GCD(3)+GCD(4)+….GCD(n) GCD(n)=gcd(C(1,n) , C(2,n) , … C(n-1,n) ) C(1,n)为组合数里的从n个东西中挑出1个东西的方案数 思路: 每个数都能表示为 如果该数是素数很容易得出GCD(n)=n; 否则的话有两种情况 1. n=p1^e1 2. n=p1^e1 * p2^e2 * …pk ^ek原创 2016-03-18 16:11:43 · 366 阅读 · 0 评论 -
HDU 2462 The Luckiest number
题意:给一个数L,是否存在一个数乘上L后的结果只有8,求最小的结果的位数 思路: 自己感觉没有想法就看了下别人的思路,ORZ 令 M=NL M=(10^X-1)/9*8 M=0 (mod L) (10^x-1)/9*8=0(mod L)->(10^x-1)=0(mod 9L/Gcd(L,8)) ->10^x=1(mod 9L/Gcd(L,8)) 这时候就可以用欧拉定理啦 mod=9原创 2016-03-29 23:06:50 · 336 阅读 · 0 评论