随笔分类 - ACM_数学
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给n个棒子,求任意组成3根能形成三角形的概率。 用FFT求出任意两根棒子组合成新的长度,这种长度的组合有多少种。 用cnt[i]表示和的长度为i的棒子组合有多少种。 (1) 首先去掉cnt里重复的部分,一根棒子不能与自己组合,所以有cnt[a[i] * 2] -- (2) 任意两个棒子组合的顺序我们不需要考虑,而实际上他们算了两次,所以有cnt[i] /=2 (3) 枚举所有棒子,假设这根棒子a[i]是组成三角形其中最长的那根,我们首先求出另外两根的长度和比它的长的总...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 一般的的大数乘法都是直接模拟乘法演算过程,复杂度O(n^2),对于这题来说会超时。乘法的过程基本就是等同于多项式相乘的过程,只是没有进位而已。对于这种问题我们需要转化然后用FFT求解。FFT是用来计算离散傅里叶变化(DFT)及其逆变换(IDFT)的快速算法,复杂度O(n*logn)。DFT有一个很重要的性质:时域卷积,频域乘积;频域乘积,时域卷积。那么什么是时域、频域、卷积、乘积呢?时域和频域是两种信号的分析方法,DFT可以把时域信号变化为频域信号。卷积就是作多项式乘法,乘积就是依次乘...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4627 对n除个2,然后考虑下奇偶。。。 1 //STATUS:C++_AC_15MS_228KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #in...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4642 看右下角的状态就行了,因为上面的操作每次都会改变它,而最后的局势是根据它来的。。。 1 //STATUS:C++_AC_15MS_218KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #i...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4611 先求出循环节,然后比较A和B的大小模拟过去。。。 1 //STATUS:C++_AC_15MS_436KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #in...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602 把n等效为排成一列的n个点,然后就是取出其中连续的k个点。分两种情况,一种是不包含两端,2^( n−k−2 ) ∗ (n−k−1) ,另一种是包含两端:2 ∗ 2^( n – k − 1)。然后特殊情况特判一下。。 1 //STATUS:C++_AC_31MS_248KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2096 f[i][j]表示从当前状态到目标状态的期望。。。 1 //STATUS:C++_AC_188MS_8076KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include...
阅读全文
摘要:关于入门资料,推荐看,取火柴的那10个定理必须理解。五篇国家集训队论文: 张一飞: 《由感性认识到理性认识——透析一类搏弈游戏的解答过程 》 王晓珂:《 解析一类组合游戏》 方展鹏:《浅谈如何解决不平等博弈问题》 贾志豪:《组合游戏略述——浅谈SG游戏的若干拓展及变形》 曹钦翔:《从“k倍动态减法游戏”出发 探究一类组合游戏问题》 下面是题目总结:1.HDU 1404 预处理,推出所有情况的胜负情况。 1 //STATUS:C++_AC_468MS_4140KB 2 #include 3 #include 4 #include 5 //#include 6 ...
阅读全文
摘要:转自:http://blog.csdn.net/acm_cxlove/article/details/7854530以下是我从网上收集的关于组合博弈的资料汇总: 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者..
阅读全文
摘要:题目连接:http://acm.sgu.ru/problem.php?contest=0&problem=275 题意:给n个数字,从中选取某些数字进行XOR操作,使得值最大。 肯定要把每个数字转化为二进制的形式。在XOR操作的时候,首先优先高位,如果高位能取得 1 ,那么就一定要取 1 ,这其中肯定有很多情况,我们并不要求出每种情况去扩展,因为状态太多了,只要判断有没有满足的情况就可以了。这里就是异或高斯消元了。假设现在是判断第 i 位,那么首先把A[i][n]赋值为 1,如果在当前方程下有解,那么继续地位,否则把A[i][n]赋值为0,继续低位。 1 //STATUS:C++_A.
阅读全文
摘要:题目连接:http://poj.org/problem?id=2065 高斯消元求出上三角矩阵后,求出 a×x = b(mod p),即 a×x - p×y=b,用扩展欧几里得求出x。 1 //STATUS:C++_AC_32MS_156KB 2 #include <functional> 3 #include <algorithm> 4 #include <iostream> 5 //#include <ext/rope> 6 #include <fstream> 7 #include <sstr
阅读全文
摘要:题目连接:http://poj.org/problem?id=2947 求解形如: a11×x11%p+a12×x12%p+......+a1n×x1n%p=k1%p a21×x21%p+a22×x22%p+......+a2n×x2n%p=k2%p ...... an1×xn1%p+an2×xn2%p+......+ann×xnn%p=kn%p 直接取模求解线性方程组。在网上找了一个整数Gauss的模板,貌似网上很多都是用的这个,但这个模板在多解情况下求变元是否确定有问题,应该用高斯-约当消元求出最简的
阅读全文
摘要:题目连接:http://poj.org/problem?id=3185 异或高斯消元简单题。 1 //STATUS:C++_AC_16MS_488KB 2 #include <functional> 3 #include <algorithm> 4 #include <iostream> 5 //#include <ext/rope> 6 #include <fstream> 7 #include <sstream> 8 #include <iomanip> 9 #include <numeric>
阅读全文
摘要:题目链接:http://poj.org/problem?id=1681 异或高斯消元。如果是唯一解,则直接拿解与初始状态比较。如果有多解,则枚举自由变元的的取值情况,最坏复杂度O( 2^N )。 1 //STATUS:C++_AC_16MS_496KB 2 #include <functional> 3 #include <algorithm> 4 #include <iostream> 5 //#include <ext/rope> 6 #include <fstream> 7 #include <sstream> 8
阅读全文
摘要:题目链接:http://poj.org/problem?id=1222 异或高斯消元。 1 //STATUS:C++_AC_0MS_156KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 1...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1830 Gauss消元真正意义上的第一道(以前做过一道裸的)。。。 其实这种题目暴力搜索完全可以解决。。。 我们先建立一个矩阵,A[i][j]表示第 i 个开关是否受第 j 个开关的影响,S[i]表示第 i 个开关的初始状态,D[i]表示第 i 个开关的最终状态,X[i]表示操作,那么S*A*X=D,令B=S*D,则有A*X=B: A11*X1^A12*X2^......^A1n*Xn=B1 A21*X1^A22*X2^......^A2n*Xn=B2 ...... An1*X1^An2*X2^....
阅读全文
摘要:转自:http://blog.sina.com.cn/s/blog_4d88e9860100fc0a.html说到这个数列,就要谈到互质的概念,这个性质导致了这个数列及那个SB(-_-)树的优美的特性。在正式讲Farey前,先考虑一个问题:给出任意一个实数(有理数、无理数),与其最相近的分数是多少。对于一个有理数,我们自然知道有唯一的分数相对应,而无理数则是无限的接近,无法相等,那么怎么找这个分数呢?看完了farey,一切豁然开朗。来看这样一棵树:发现其特性了吗,比如1/4,是(0+1/1+3)也就是说是上一层中与其“相邻”的2个分数,分别分子加分子,分母加分母形成。对于每一个farey数列,
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4556 题目是要求Farey数列:分子和分母小于等于n的所有最简分数的个数,n每增加1,由于分数最简,那么分子只能与分母互素,个数即为phi(n)。 1 //STATUS:C++_AC_109MS_15896KB 2 #include <functional> 3 #include <algorithm> 4 #include <iostream> 5 //#include <ext/rope> 6 #include <fstream> 7
阅读全文
摘要:题目链接:http://poj.org/problem?id=2778 [摘自Matrix67] 题目大意是,检测所有可能的n位DNA串有多少个DNA串中不含有指定的病毒片段。合法的DNA只能由ACTG四个字符构成。题目将给出10个以内的病毒片段,每个片段长度不超过10。数据规模n<=2 000 000 000。 下面的讲解中我们以ATC,AAA,GGC,CT这四个病毒片段为例,说明怎样像上面的题一样通过构图将问题转化为例题8。我们找出所有病毒片段的前缀,把n位DNA分为以下7类:以AT结尾、以AA结尾、以GG结尾、以?A结尾、以?G结尾、以?C结尾和以??结尾。其中问号表示“其它情况.
阅读全文
摘要:题目链接:http://poj.org/problem?id=3128 题意:给定一个置换,求是否能由另一个置换平方后组成。 简单的性质,只要所给的置换中相等的偶数长度循环个数为偶数个就是可行解。 1 //STATUS:C++_AC_0MS_196KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<al
阅读全文