
math
playwfun
宁静致远
展开
-
uva-10883(二项式系数)
规律简单 最后每项要加的最终系数为 c(n-1,i) / 2^(n-1);累加求和即可,但因为系数直接算出会出现精度问题,用大数会超时的,所以从求x 改求exp(log(sum));#include #include #include #include #include using namespace std;typedef long long LL;const int m原创 2014-11-27 14:54:49 · 567 阅读 · 0 评论 -
HDU 5312(数学推导+技巧)
首先说一下,N*(N-1)/2为三角形数,任意一个自然数都最多可由三个三角形数表示。对于,对于给定的要求值 V, 那么其一组解可表示为 V = 6*(K个三角形数的和)+K; 即任意由k个数组成的解 都有 (V-K)%6==0; 那么只需要找到最小的K(1,2需要特判,结论最小值为3);在对2进行特判时候,可以从两端到中间的线性扫描来做。#include #include #i原创 2015-07-26 10:25:57 · 806 阅读 · 0 评论 -
HDU - 5407(规律)
本题目的规律就是记 f[n] = LCM(1, 2, 3, .... n); 那么 ans[ n ] = f[ n+1 ] / (n+1);所以只需递推计算出f[n] ; 那么结果ans[ n ] = f[ n+1 ]*rev(n+1)%MOD; 看到了递推计算逆元的神代码;在代码的init()里面。还有f[n] 比f[n-1 ] 大,只有一种情况,f[n]是由某一个素数的幂构成原创 2015-08-24 10:09:15 · 324 阅读 · 0 评论 -
HDU 4767( china + 矩阵快速幂)
本题目的模数可以拆分啊,95041567 = 31*37*41*43*47;有bell数有 对任意素数 b[ p+n ] = (b[ n ] + b[ n+1 ]) %p; 这个先用快速幂求出每个小素数模下的值,然后用China搞定。#include #include #include #include #include typedef long long ll;typedef原创 2015-08-10 21:46:35 · 475 阅读 · 0 评论 -
hdu 4579(稀疏矩阵消元(每行稀疏元连续))
本题目是典型的建立方程组用高斯消元法求解。但是问题在于方程组有n个,未知数有n个,直接上模板会超时,那么手写个消元就可以了,对高斯消元每行的操作对于本题目都可以降到o(m)。#include #include #include #include #include using namespace std;#define rep(i,n) for(int i=0;i<(int)n;原创 2015-08-06 11:14:43 · 1672 阅读 · 0 评论 -
HDU 5399(简单数学)
本题目的意思是给出m个 (f1 , f2, ... fm) 置换,一些置换丢失,让求有多少种组合,可以使得 f1( f2(... fm(i))) =i (1这样问题可以转换为若任意确定一些丢失的置换,而保留一个丢失的置换fi, 有 X*fi*Y=I; fi =(X的逆)*(Y的逆)所以,有唯一解,所以个数为记-1的个数为cnt那么结果(n!)^(cnt-1),本题目有特殊情况要注意.原创 2015-08-19 08:13:08 · 360 阅读 · 0 评论 -
codeforces round# 320 div1(C 思路三分)
本题目的意思是给定一个数列,有真正有负,让找一个值x使得数列 a[1] - x, a[2]-x, ....a[n]-x 的连续区间和绝对值的最大值最小。首先x选a1 - > an的最大值max_,那么最大负数值为sum1->n, 最大正数为0 ,选最小值反之。所以一条负数绝对值最大值的线与负数绝对值最大值的线在x取值为min_ -> max_ 范围内交叉,那么答案的线条就是一个V型,用原创 2015-09-17 12:57:19 · 406 阅读 · 0 评论 -
Aizu 2595(容斥原理)
题目意思:计算 x1 + x2 + .. xD =N (xi分析:我们有这样的一个思路,求d[i][j]代表用i个空位放置j个每个都非空,且为合法放置的个数,那么res = sum( d[i ][ n ] *C(D , i));那么我们来分析一下容斥的思路。容斥首先确定,性质,和结果怎样用性质表示。定义 , Ai 为第i天放置的元素小于X, 那么ans = 所有D个集合的交原创 2015-11-08 20:17:07 · 487 阅读 · 0 评论 -
UVALive 3490(失配 + 解方程)
本题目的意思:给定n(n<= 26)用头1-n个大写字母来随机生成串,问要使串中有一个给定的子串(长度不超过12)平均期望的串长。可以考虑当前d[i]代表在当前随机生成的文本串与模板穿匹配到了i,生成给定的子串的期望长度。很明显d[i]=sum(d[f[i][k]])/n+1(1<=k<=n);这里的f[i][k]为下一个字符为k那么和模板串的最大匹配。若用自动机建立是失配边的话,原创 2015-10-10 16:04:42 · 468 阅读 · 0 评论 -
codeforces 589D (简单线性公式题目)
本题目:给定了n(n f 代表逆向行走问能不能对于一个特定元组,与几个元组在直线上相遇,相遇即存在(t , x) 同时同位置。分析:把每个元组转化成一个t 和x的线性方程, 我们发现方程 为 x = t - k 或者 x = k - t 的形式,当方程斜率相同,只有在k相同时,判定义域是否相同。斜率不同找到唯一交点,判是否同在两个定义域中。#include #inclu原创 2015-10-28 12:29:10 · 552 阅读 · 0 评论 -
费马小定理 -- 讲解
(选自《数论妙趣——数学女王的盛情款待》第六章 开门咒)数论中充斥着许多易于观察到的事实,诱使人们用普通归纳推理的办法去进行推广。对此,必须慎之又慎,以免误入陷阱。设想你偶而把2自乘7次,再减去2,得27-2=126,随后发现,126恰好能被2的幂指数7整除。接着又发现,25-2=30,30也能被2的幂指数5整除;211-2=2048,2048也能被2的幂指数11整除。从7,5,11都是奇转载 2016-01-03 20:41:19 · 1318 阅读 · 0 评论 -
HDU - 5673(catalan数的应用)
分析:记路径长度为nn,那么机器人最多向右走\lfloor \frac{n}{2} \rfloor⌊2n⌋步并向左走\lfloor \frac{n}{2} \rfloor⌊2n⌋步。Ans(n) = \sum_{i=0}^{\lfloor \frac{n}{2} \rfloor} C_n^{2i} \ Catalan(i)Ans(n)=∑i=0原创 2016-04-25 16:01:10 · 571 阅读 · 0 评论 -
HDU 3758
n! 拆分因子比较好的方法。二分可行最大值。#include #include #include #include #include using namespace std;typedef long long ll;typedef pair pii;#define rep(i , n) for(int i = 0 ;i<(int)n;i++)#define rep1(i原创 2016-05-11 22:14:07 · 466 阅读 · 0 评论 -
HDU - 5238(剩余定理)
题意:给出一个计算的序列,包含{+,*,^}三种运算。给出两种操作,1是给出初始值,求按照序列计算的答案,2是修改序列中某个位置的数和运算符。描述:问题最后要把结果对29393去模,把模拆分为7*13*17*19,那么如果能够在每次修改后求出t1 = ans%7; t2=ans%13, t3=ans%17, t4=ans%19.那么问题的解就是模方程组『 x≡t1(m原创 2015-05-30 12:32:06 · 505 阅读 · 0 评论 -
UVA - 10870(构造矩阵)
这题算矩阵类入门题目: d 最大十五。n上限为2147483647,给定a1 - ad 和 f(1) - f(d) 求 f(n); 由关系式f(n) = a1*f(n-1)+a2*f(n-2)..ad*f(n-d); 很容易用矩阵表达这个关系式以d为5为例 {0 1 0 0 0 { f(n-5) { f原创 2015-05-12 22:23:25 · 336 阅读 · 0 评论 -
UVA - 12169 Disgruntled Judge (模线性方程的解为同余系)
首先本题直接暴力枚举a,b可解,最坏为1秒左右时间可解出(一个test文件需要的时间)高效算法为枚举a,然后由x1,x3,解出ba*x1+b - MOD*y1 = x2;a*x2+b - MOD*y2 = x3;解得:x3 - a*a*x1=(a+1)*b + MOD * y;该方程为关于变量b的模线性方程 , 则解出的为一个同余系;b = b0 + MOD*k原创 2014-12-15 19:49:41 · 750 阅读 · 0 评论 -
UVA - 11526(a/b式子计算)
站在当前的i考虑的话 n/i=p; 假设j为最大的满足 k/j >= p 的整数,j #include #include #include #include using namespace std;typedef long long LL;int main(){ LL n; int T; scanf("%d",&T); while(T--){原创 2014-12-17 13:14:23 · 552 阅读 · 0 评论 -
UVA - 12063(关于倍数的dp转化成模运算)
以状态d(i,j,k)代表第前i位用j个一能组成所有对K取模余数为k的数状态转移即该位置为1还是0还有一点要说明 最后结果不是d(n-1,n/2-1,K-yu[n] (yu[n]为2^(n-1)对K取模后的值) ) 而是 d(n-1,n/2-1,(K-yu[n])%K);#include #include #include #include #include #include usi原创 2014-12-17 16:29:19 · 940 阅读 · 0 评论 -
11105 - Semi-prime H-numbers (生成特定的H素数表)
记MAXN 为最大的H范围 最大的H数n为(MAXN-1)/4;则对所有的H数枚举其H数倍削掉其倍数可得到H素数表,然后枚举生成H半素数即可#include #include #include #include #include #include using namespace std;typedef long long LL;const int maxn = 100000原创 2014-12-17 14:17:12 · 560 阅读 · 0 评论 -
UVA - 1642 Magical GCD(nlogn传统算法思想 序列较短的维护队列)
这里维护i表示当前结尾位置只需找到快速找出最大开头j即可,考虑不同的gcd(aj,aj+1,...ai)会从后往前保持gcd值或者是变为原来的约数,所以维护二元组(j,g) (代表gcd为g的最小位置)则序列长度最大不超过(log(maxn) = log(10^12))非常短,所以我直接采取循环刷新;每次刷新即对g = gcd(g,a[i]); 并删除g相同的元素,取最优;#include原创 2014-12-18 12:01:22 · 625 阅读 · 0 评论 -
UVA - 1393 Highways(枚举包围盒大小,包围盒只有对角线穿过两个点)
#include #include #include #include using namespace std;typedef long long LL;const int maxn =305;int m,n;int g[maxn][maxn];int gcd(int a,int b){return b==0 ? a : gcd(b,a%b);}void init(){原创 2014-12-18 13:12:16 · 538 阅读 · 0 评论 -
UVA - 10900 So you want to be a 2n-aire?(连续概率)
#include #include #include #include using namespace std;long long c[41];double d[45];int main(){ c[0]=1; for(int i=1;i double t,p0; int n; while(scanf("%d %lf",&n,&t)==2原创 2014-12-18 16:03:38 · 537 阅读 · 0 评论 -
UVA - 11308(规律)
伤心啊,debug了一晚上,主要是是第一开始拆分数字时,没有搞对主题思路,从最高位依次确定数字;构成模板串;#include #include #include #include #include #include #include using namespace std;long long c[11];long long d[11];int Bit(long long原创 2014-12-03 22:04:17 · 578 阅读 · 0 评论 -
HDU 4248(递推)
很简单的dp了,只是没有看清选多个时候的选法是什么,比如选6个 第一堆选 2 第二堆选 1,第三堆选3则组合数为 C(6,2)*C(4,1)*C(3,3)知道这一点,而且实现很大,直接dp就可以了。#include #include #include #include #include #include #include #include #include #includ原创 2015-04-18 11:05:26 · 384 阅读 · 0 评论 -
HDU - 5207(素数筛法判断)
最多1e5个 在1e5以内的数,求两个数使得他们最大公因子最大。用素数筛法,倒叙枚举公因子,然后统计所有是公因子倍数的数的个数。#include #include #include #include using namespace std;const int maxn = 1e5+100;int a[maxn],n;int main(){ int kase=1;原创 2015-04-18 22:09:39 · 487 阅读 · 0 评论 -
BestCoder Round #37(b 根据不等式解范围)
不等式解 x+y >z , x+z > y, y+z>x && x+y+z = len;暴力枚举x ,解出 (len - 2*x)/2但实际计算时候,上界根据len的奇偶性判断 为 最大(len - 1)/2(取改式的整数值),而下界直接求出整数+1即可。#include #include #include #include #include #include using namesp原创 2015-04-12 10:51:47 · 392 阅读 · 0 评论 -
UVA - 11542(求模2剩余系的矩阵的秩)
由于本题的所有数的素数分解都比500小,可以用每个数的素数拆分后对应前五百素数的个数(个数记为m),组成矩阵中的一列共n列(每个素数的个数模2,因为最终结果要求所选元素乘积的值对应每个素数的的个数都应该是偶数),那么解向量是一个有01构成的(每个01代表对应的元素选与不选),右乘上述矩阵没使得结果为一个0(由个m零构成)列向量。那么只需求m*n矩阵的秩,那么便可以知道自由变元的个数x,解就是2原创 2015-05-04 21:30:21 · 1100 阅读 · 0 评论 -
Codeforces 963C(Math,Number Theory)
结题思路如下:记一个长方向水平方向宽度为h,竖直方向宽度为w,对n类长方形先按h排序,再按w排序,并将所有h相同的长方形放到一个容器中。可知,h不同的每个容器,代表着所拼接成的大长方形的一列或者是几列。对每个容器,如果一种w出现在一个容器中,则必然出现在其他所有容器中,且该中w的数目与该容器所有长方形数目的比值,与其他容器相应的比值相同。即任意一个容器的一类长度为w的长方形在其容器所在列所占行数与...原创 2018-05-14 13:35:16 · 420 阅读 · 0 评论