数学
文章平均质量分 73
My_ACM_Dream
生活没有彩排每天都是现场直播
展开
-
hihoCoder 1166 交换代数 (高斯消元,概率)
题意:给出区间[1,n]的状态,有0、1.现在每次可以选择任意区间取翻转,问全部翻转成0的次数期望。总共有n(n+1)/2个区间。题解:这个CLJ链接将的很清楚了。那么根据高斯消元列方程求解,因为有-2,+2,那么可以部除以2,这样就变成-1,+1.#include#include#include#include#include#include#include#i原创 2015-05-19 23:49:34 · 1114 阅读 · 0 评论 -
hdu 5226 Tom and matrix (推公式,lucas)
直接求这个公式:∑bi=aCki=Ck+1b+1−Ck+1alucas :Cmn≡Cm/pn/p⋅Cm%pn%p(mod p)因为p可能是小质素,这样超过阶乘p的阶乘会爆0。#include#include#include#include#include#include#include#include#include#define B(x) (原创 2015-05-09 22:14:27 · 707 阅读 · 0 评论 -
acdream 1116 Gao the string! (扩展kmp,dp思想,矩阵优化)
题意:题目要求每个后缀能包含多多少前缀,只不过这个数作为斐波那契的下标,求出对应斐波那契的和。题解:首先对于要计算出对应的后缀包含多少前缀,如果单单指考虑这样某个后缀能和多少前缀重合,可以通过扩展kmp求得。因为是求后缀对应的某个子串能包含多少前缀,因此要从后往前递推累加,然后同时计算对应的斐波那契数。开始的时候打斐波那契数的表,想找到循环节通过模处理,但是太大了,打不了,开始还因为这原创 2015-05-10 00:57:19 · 588 阅读 · 0 评论 -
polya|burnside定理的一些总结
基于正方形的置换:(hdu 1812)旋转只有 0,90,180,270度三种旋法。旋0度,则置换的轮换数为n*n旋90度,n为偶数时,则置换的轮换数为n*n/4,n为奇数,则置换的轮换数为(n*n-1)/4+1旋180度,n为偶数时,则置换的轮换数为n*n/2,n为奇数,则置换的轮换数为(n*n-1)/2+1旋270度,n为偶数时,则置换的轮换数为n*n/4,n为奇数,则置换原创 2015-04-27 16:35:19 · 1373 阅读 · 0 评论 -
polya补提链接
链接原创 2015-04-27 16:38:52 · 615 阅读 · 0 评论 -
hdu 2865 Birthday Toy (polya,好题)
题意:有一个环由n个组合和一个中心珠子组成,现在有k中颜色,问相邻的不能同色的染色方案数。题解:这题的n很大所以只能枚举约数gcd(n,i)=r,但是k也超级大,完全无法用关系矩阵解决。那么要考虑是否有规律。对于中心有珠子的这种染色法,明显可以枚举中心珠子的颜色,然后计算k-个颜色嫩染多少种的情况,最后乘以k即可。我们可以枚举外围的第一个珠子颜色,然后用dp解决这种排列问题。现在假设枚原创 2015-04-23 16:18:16 · 824 阅读 · 0 评论 -
poj 2888 Magic Bracelet (polya,矩阵)
题意:一个n个节点的环,可以涂m中不同的颜色,但是有k对颜色是不能相邻的。现在问有多少种涂法。题解:这题我们枚举gcd(n,i)=k,判断有多少个i满足k统一计算,相当于求n/k的欧拉函数,对于k对颜色无法相邻的这个限制,我们将能相邻的定义成关系矩阵,这样k次幂后就能计算出对应的不懂置换的个数,接着用容斥处理欧拉函数,或者用欧拉定理求。#include#include#incl原创 2015-04-21 21:26:55 · 531 阅读 · 0 评论 -
2014 ACM Regional hdu 5072 (同色三角形模型,容斥原理)
题意:给出n个数,求这个n个数满足{gcd(a,b)=1&&gcd(a,c)=1&&gcd(b,c)=1||gcd(a,b)!=1&&gcd(a,c)!=1&&gcd(b,c)!=1}这个条件的三元组个数。题解:这里用到了同色三角形的模型,先说下同色三角形。同色三角形:假设平面上有n个点,现在有些点被染上黑色,而有些则被染上白色。对于平面上的三个点连线可以组成三角形,总的三角形原创 2015-04-15 11:05:11 · 692 阅读 · 0 评论 -
poj 2154 Color (polya,欧拉函数|容斥原理)
题意:有n种颜色的珠子要串成长度为n的环,有多少种方案。题解:因为n很大很大,考虑优化。对于n个旋转,任意一个旋转i,他的循环节个数时gcd(n,i),令a=gcd(n,i)发现等于a的i有多个,并且a也就是n的约数并不多,那么就可以枚举约数这样复杂度降到O(sqrt(n))已经很优秀了。那么对于某个约数a,能使得gcd(n,i)=a的i的个数要怎么就算呢?其实这个问题可以转化成求原创 2015-04-14 21:52:09 · 669 阅读 · 0 评论 -
poj 3128 Leonardo's Notebook (置换群)
题意:一个长度为26的字符串,包含26个字母,问这个置换能否是其他某个置换的平方。题解:首先引入定理:1.任意一个长为 L 的置换的k次幂,会把自己分裂成gcd(L,k) 分, 并且每一份的长度都为 L / gcd(l,k)2.假如 d = gcd(L,K),l = L / gcd(L,k),那么我们只需要找到d个长为l的循环,将他们交错循环连接成一个长为 d * l 的大循环原创 2015-04-08 20:12:55 · 540 阅读 · 0 评论 -
hdu 3923 Invoker (polya,扩展gcd)
题意:n种颜色串成m长度的环的方案数,赤裸裸的polya,ans/(2*n)%MOD要用到乘法逆元,用扩展欧几里得求解。题解:扩展欧几里得算法扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。int ex_gcd(int a,原创 2015-04-14 17:00:37 · 812 阅读 · 0 评论 -
poj 1721 CARDS (置换群)
求置换s次后的结果#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,int b){ if(b>a)a=b; }vo原创 2015-04-08 18:42:31 · 441 阅读 · 0 评论 -
uva 11255 Necklace (polya)
题意:给出种颜色的球的个数,现在要将全部的球拼成一个环,有多少种拼发。题解:分成两种情况,1、翻折;2、旋转。1、翻折。要分奇数和偶数,奇数只有一种翻折方法就是定点和边中点连线为轴转,偶数即可是定点和定点也可以是边和边。2、旋转。每种旋转循环节长度都是能被环的长度整数的,因此只要找到循环节的个数(gcd(n,i)),长度就可以计算出来了。注意数据量,要用高精度。#inc原创 2015-04-13 20:54:33 · 555 阅读 · 0 评论 -
uva 10601 Cubes (polya)
题意:有6种颜色,现在给出各个颜色的个数,要在正方体上染色,有几种染法。题解:这题因为颜色种类的个数给出了,只能用burnside引理来做。对于每种置换计算等价的个数。总共有四种变换1、自身不变。循环节12个,长度12、根据定点连线为轴旋转120度、240度。循环节4个,长度33、根据对面的中心连线为轴旋转90、180、270度。90、270循环节个数3,长度4。180原创 2015-04-13 16:59:19 · 765 阅读 · 0 评论 -
acdream 1060 递推数 (找循环节,矩阵乘法)
题意:已知A(0) = 0 , A(1) = 1 , A(n) = 3 * A(n-1) + A(n-2) (n ≥ 2)求 A(A(A(A(N)))) Mod (1e9 + 7)题解:因为任何数取摸到最后都会形成循环节,于是只要找到每层中循环节的大小,热按后用摸上循环节的结果作为标号不断迭代。找到循环节后,就是赤裸裸的矩阵乘法。#include#include#i原创 2015-04-30 18:24:20 · 749 阅读 · 0 评论 -
codeforces 520E Pluses everywhere (数学题)
这题ORZ。主要思想就是计算某位能成为个位、十位、百位。。等的个数。#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,i原创 2015-04-27 22:09:07 · 738 阅读 · 0 评论 -
hdu 5212 Code (容斥)
题意:int calc{ int res=0; for(int i=1;i for(int j=1;j { res+=gcd(a[i],a[j])*(gcd(a[i],a[j])-1); res%=10007; } retu原创 2015-04-26 21:52:51 · 812 阅读 · 0 评论 -
poj 1061 青蛙的约会 (解同余方程)
题意:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐原创 2015-05-17 19:36:28 · 913 阅读 · 0 评论 -
hdu 5006 Resistance (高斯消元,0 0!)
题意:一些导线连接一些点,导线的电阻只有0和1.求S和T的等效电阻。题解:这题给re跪了,不过思路应该不会错,注意高斯消元的姿势。首先对于0电阻的这导线显然无法直接用高斯消元,先度这些点缩点,0电阻的缩成一个点,接着就可以根绝高斯消元列方程了。555#include#include#include#include#include#include#include#inc原创 2015-05-15 20:40:14 · 596 阅读 · 0 评论 -
高斯消元模板
mod 2 方程写法:int Gauss(int n, int m){ int r = 0, c = 0; while(r < n && c < m){ int id = r; for(int i = r + 1; i < n; i++) if(maze[i][c] > maze[id][c])原创 2015-05-05 21:32:52 · 2050 阅读 · 3 评论 -
hdu 4870 Rating (高斯消元解概率dp)
题目很简单,离散化下,然后dp方程E[i][j] = E[i][j-2]*(1-p) + E[i][j+1]*p + 1;(假设i>=j)因为存在E[i][j-2]未能计算出来的问题,因此dp无法解决,考虑用高斯消元。将方程变形 E[i][j] - (1-p)*E[i][j-2] - p*E[i][j+1] = 1;然后每个状态都有对应的方程,每个方程一个表达式,用高斯消元解这些表达式原创 2015-05-06 13:38:28 · 639 阅读 · 1 评论 -
uva 11542 Square (高斯消元)
题意:求n个数抽任意数组成的集合满足里面都是平方数的个数。题解:分解质因数,列方程,求自由变元个数。#include#include#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;原创 2015-05-05 21:06:02 · 490 阅读 · 0 评论 -
hdu 3976 Electric resistance (高斯消元)
题意:给出一个电路图,两个节点之间连一个电阻,现在问1~n的等效电阻是多少。题解:首先考虑一个节点,物理上的常识,这个节点流入和流出的电流和是0,那么我们假设这个节点的电势为x1,那么那么这个节点可以列出方程 x1/r1+x1/r2+....x1/ri=0,然后考虑n个节点,可以列出n个这样的方程求解得出答案,对于方程我们是假设流入1的电流为1,流出n的电流肯定就是-1,那么最后的等效原创 2015-03-18 19:08:27 · 626 阅读 · 0 评论 -
uva 10828 Back to Kernighan-Ritchie (高斯消元解概率问题)
题意:给出一个图,每个节点都连接着前驱和后继,现在问每个节点执行的期望数。题解:如果这题每个节点没有回头,那么用dp解妥妥的,但是有回路这样只能用高斯消元搞。对于每个节点的期望数设为xi,那么xi的期望数等于每个前驱的期望数/出度的总和。于是可以列出多个方程高斯消元求解,不过要注意有无穷的情况,应为会产生环!!#include#include#include#include原创 2015-05-05 18:59:59 · 556 阅读 · 0 评论 -
acdream 1070 神奇的%系列二 (离线操作)
题意:给出一个序列,然后又q个询问,每个询问给出[L,R],求区间中能整除X的数的个数。题解:这题类似于线段树,要求整除x的数的个数,其实就是求是X的因子的个数,我们首先打出1-maxn内的因子表。然后根据题目将L和R都向X连一条边,之后用离线操作统计区间[1,L],[1,R]因子的个数。具体做法看代码。#include#include#include#include#in原创 2015-05-01 09:35:29 · 683 阅读 · 0 评论 -
acdream 1071 神奇的%系列一 (树状数组维护,离散化)
题意:给出一个序列,求这个序列中满足i!=j&&a[i]%a[j]!=0的个数。题解:其实逆问题跟容易求,我们先求a[i]%a[j]==0的个数,然后用总的个数-这个值。总的个数可以用树状数组维护,a[i]%a[j]==0的个数可以枚举每个a[j],然后得到a[j]的倍数从而统计。#include#include#include#include#include#inclu原创 2015-05-01 10:08:18 · 584 阅读 · 0 评论 -
zoj 3872 Beauty of Array (数学题)
题意:给出一个序列,然后问这个序所有子序列对应数值的和是多少,注意这个和是序列中不同的数的和。题解:这题我们可以这样分析,对于某个数,考虑这个数对总的结果的贡献是多少,于是根据这个方向去思考,加上一些实例的判断,发现可以用递推去求解。#include#include#include#include#include#include#include#include原创 2015-04-28 22:48:33 · 587 阅读 · 0 评论 -
zoj 3870 Team Formation (数位统计问题)
题意:给出n个数组成的序列,求满足这样的数对的个数,i!=j,a[i]^a[j]>max(a[i],a[j]);题解:这题可以从二进制的角度去观察,我们可以枚举数对中的某个数i,然后计算有多少个j满足。对于j个数的计算,通过2进制数位的分析会发现,只要小于a[i]并且最高为和a[i]的对应位是不同的数就满足条件。预处理出最高位数是1的个数,剩下就是暴力枚举i和a[i]的位。#inc原创 2015-04-28 22:44:53 · 546 阅读 · 0 评论 -
FZU 2191 完美的数字 (水题)
题意:求出[l,r]区间上所有数的完美度完美度定义:我们知道一个数字的完美度是 把这个数字分解成三个整数相乘A*A*B(0题解:这题看是范围很大,其实只要枚举A*A的值就可以解决了,总复杂度是O(n^(1/3))。#include#include#include#include#include#include#include#include#includ原创 2015-05-03 21:38:53 · 918 阅读 · 0 评论 -
hdu 5211 Mutiple (乱搞)
题意:一个序列,求这个序列每个1题解:有个技巧,不过这题暴力的人也过了,ORZ。#include#include#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef lo原创 2015-04-26 21:47:45 · 646 阅读 · 0 评论 -
poj 2409 Let it Bead (polya)
#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,int b){ if(b>a)a=b; }void cmin(int&原创 2015-04-12 10:37:54 · 470 阅读 · 0 评论 -
poj 1026 Cipher (置换群)
求一个置换的第k次置换的结果。#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;typedef unsigned long long ull;void原创 2015-04-07 23:53:37 · 418 阅读 · 0 评论 -
poj 1753 Flip Game (高斯消元)
题意:给出一个4*4的方格,里面有黑色和白色的棋子,如果操作某个棋子,那么这个棋子以及这个棋子的四周会反转,由黑变白或由白变黑。求最小操作数,使得整个方块变成同色。题解:高斯消元,开关类问题,有可能有多解,所以要枚举自由变元找到最小解,分别对全变成黑色和全变成白色跑一边高斯消元,去最小值。#include#include#include#include#include#i原创 2015-03-17 16:24:30 · 432 阅读 · 0 评论 -
poj 1681 Painter's Problem (高斯消元)
题意:给出一个矩阵,矩阵只有黄色和白色,有一个画笔,在某个地方画就可以将这个点以及四周变成黄色。求最少要画多少笔。题解:高斯消元,开关类问题。判断无解条件。#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x)原创 2015-03-17 13:28:01 · 469 阅读 · 0 评论 -
poj 1222 EXTENDED LIGHTS OUT (高斯消元)
题意:给出一个5*6的矩阵,每次操作以点,可以使这个矩阵的这个点一级四周的点改变,0变1,1变0。现在问操作的方法应该是怎么样。题解:高斯消元,开关类问题。具体做法参见:here我是参照kuangbin的模板搞的。#include#include#include#include#include#include#include#include#includeus原创 2015-03-17 12:58:02 · 479 阅读 · 0 评论 -
uva 11806 Cheerleaders (容斥原理)
计算一个n*m的格子放k个球的方案数,要求第一行,第一列,最后一行,最后一列,都要有球。直接计算显然是由点复杂,根据容斥原理,先求逆问题,也就是:第一行有球||第一列有球||最后一行有球||最后一列有球。这些都比较好求,然后用总数减去就是答案。#include#include#include#include#include#include#include#include#i原创 2015-03-20 12:50:35 · 544 阅读 · 0 评论 -
poj 3070 Fibonacci (矩阵构造,水)
#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))typedef long long ll;const int oo=0x3f3f3f3f;const ll OO=1LL<<61;const ll原创 2015-02-26 19:41:39 · 396 阅读 · 0 评论 -
矩阵快速幂
矩阵快速幂和普通快速幂写法相似。struct Matrix{ int maze[maxn][maxn]; void Init() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) maze[i][j]=(i==j); } friend Ma原创 2015-02-26 15:26:47 · 461 阅读 · 0 评论 -
hdu 1796 How many integers can you find (容斥原理)
题意:题意就是求,有多少个数小于n并且是所给m个数中任意一个的倍数。题解:容斥原理,我们假设Ai是某m中第i个数的倍数个数,但让这个倍数是小于你的。接着就是暴力位枚举,有点慢,dfs更快。#include#include#include#include#include#include#include#include#includeusing namespace s原创 2015-03-20 14:21:53 · 438 阅读 · 0 评论 -
poj 3613 Cow Relays (floyd快速幂)
题意:给出一个带权图,问S到E恰好经过N个点的最短路。题解:floyd版的矩阵快速幂。好强大。#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))typedef long long原创 2015-02-27 13:19:50 · 544 阅读 · 0 评论