随笔分类 -  数学--------------------------

上一页 1 ··· 3 4 5 6 7 8 下一页
摘要:【算法】trie树+xor路径 【题解】 套路1:统计从根到每个点的xor路径和,由于xor的自反性,两个点到根的xor路径和异或起来就得到两点间路径和。 然后问题就是找到n个值中异或值最大的两个值,考虑枚举每个数字,对于一个数找到与其异或和最大的数。 套路2:对所有数值二进制建01-trie,对于 阅读全文
posted @ 2017-08-09 19:31 ONION_CYC 阅读(242) 评论(0) 推荐(0)
摘要:【算法】折半搜索+数学计数 【题意】给定n个数(n<=20),定义一种方案为选择若干个数,这些数可以分成两个和相等的集合(不同划分方式算一种),求方案数(数字不同即方案不同)。 【题解】 考虑直接枚举集合的子集,再枚举子集的子集(划分方式),相当于将子集看成天平,枚举子集一些数置左,剩余数置右,则每 阅读全文
posted @ 2017-08-09 16:47 ONION_CYC 阅读(296) 评论(0) 推荐(0)
摘要:【算法】DP+数学计数 【题意】给出n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案(对1004535809取模): 1.每条边连接两个不同的点,每两个点之间至多有一条边。 2.不存在三个点a,b,c使三个点间两两可以互相到达且两两之间最短距离相等。 3.边的长度均为1。 n<=20 阅读全文
posted @ 2017-08-07 16:56 ONION_CYC 阅读(271) 评论(0) 推荐(0)
摘要:第一题 题意:n个点,每个点坐标pi属性ai,从右往左将遇到的点向左ai范围内的点消除,后继续扫描。 现可以在扫描开始前提前消除从右往左任意点,问最少消除数(提前+扫描)。 n,pi,ai<=10^6 题解:很蠢的DP,我好蠢啊…… f[i]表示前i个的最少消除数(不含提前) 从左往右添加,每添加一 阅读全文
posted @ 2017-08-04 11:23 ONION_CYC 阅读(222) 评论(0) 推荐(0)
摘要:【算法】博弈论+数论 【题意】给定n个石子,两人轮流操作,规则如下: 轮到先手操作时:若石子数<p添加p个石子,否则拿走p的倍数个石子。记为属性p。 轮到后手操作时:若石子数<q添加q个石子,否则拿走q的倍数个石子。记为属性q。 拿走所有石子的人胜利,问先手是否必胜,或输出游戏会永远进行下去。 【题 阅读全文
posted @ 2017-07-28 12:04 ONION_CYC 阅读(319) 评论(0) 推荐(0)
摘要:【算法】博弈论+记忆化搜索 【题意】给定n堆石子,两人轮流操作,每个人可以合并两堆石子或拿走一个石子,不能操作者输,问是否先手必胜 【题解】 首先,若所有石子堆的石子数>1,显然总操作数为(石子数+石子堆数-1),奇数先手必胜,偶数先手必败。 若有部分石子堆的石子数=1,情况较复杂,考虑一下五种情形 阅读全文
posted @ 2017-07-28 10:21 ONION_CYC 阅读(565) 评论(0) 推荐(0)
摘要:【算法】区间DP+博弈论 【题解】其实它都不是博弈题…… 很自然的可以设f[i][j]表示i~j先手可取得的最大价值。 容易得到转移式:f[i][j]=max(a[i]+sum[i+1~j]-f[i+1][j],a[j]+sum[i~j-1]-f[i][j-1])。 化简得到f[i][j]=sum[ 阅读全文
posted @ 2017-07-26 17:23 ONION_CYC 阅读(176) 评论(0) 推荐(0)
摘要:【算法】博弈论+二分图匹配(最大流) 【题解】方格图黑白染色得到二分图, 二分图博弈:当起点不属于某个最大匹配时,后手必胜。 问题转化为那些点不属于某个最大匹配。 先找到一个最大匹配,非匹配点加入答案。 假设一个匹配点要解放成为非匹配点,则与其匹配的点必须去匹配另一个点。如果另一个点也是匹配点,则其 阅读全文
posted @ 2017-07-25 21:55 ONION_CYC 阅读(370) 评论(0) 推荐(0)
摘要:【算法】博弈论+线性基 【题解】 显然第一步取走后留给对手的序列必须不存在子序列异或和为0。 数列的线性基就是最大的值域不含0的子序列,所以取走剩下的就可以了。 从大到小插入线性基,未插入的计入答案。 #include<cstdio> #include<algorithm> using namesp 阅读全文
posted @ 2017-07-25 18:03 ONION_CYC 阅读(220) 评论(0) 推荐(0)
摘要:【算法】博弈论 【题解】这道题不是典型的SG函数题了。 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏。 我们当前先手,则考虑构造必败态来获胜。 当前已加入的NIm游戏SG=0,则必须考虑加入石子堆,若加入m堆构造出SG=0,对方有两种选择: 加入新的石子堆,则必 阅读全文
posted @ 2017-07-25 11:50 ONION_CYC 阅读(386) 评论(0) 推荐(0)
摘要:【算法】博弈论 【题解】 我们的目的是把游戏拆分成互不影响的子游戏,考虑游戏内的转移。 如果把每堆视为子游戏,游戏之间会相互影响,不成立。 将每堆的一个石子视为子游戏,其产生的石子都在同一个子游戏中。 虽然每堆的每个石子都是不同的子游戏,但显然SG值是可以共用的。 SG[x]表示第x堆上一个石子的S 阅读全文
posted @ 2017-07-24 19:17 ONION_CYC 阅读(296) 评论(0) 推荐(0)
摘要:【算法】Catalan数 【题解】 学了卡特兰数就会啦>_<! 因为奇偶各自递增,所以确定了奇偶各自的数字后排列唯一。 那么就是给2n个数分奇偶了,是不是有点像入栈出栈序呢。 将做偶数标为-1,做奇数标为+1,显然当偶数多于奇数时不合法,因为它压不住后面的奇数。 然后其实这种题目,打表就可知啦……Q 阅读全文
posted @ 2017-07-20 22:31 ONION_CYC 阅读(358) 评论(0) 推荐(0)
摘要:【题意】给定G,N,求: $$ans=G^{\sum_{i|n}\binom{n}{i}}\ \mod\ \ p$$ 1<=N,G<=10^9,p=999911659。 【算法】欧拉定理+组合数取模(lucas)+中国剩余定理(CRT) 【题解】 先考虑简化幂运算,因为模数为素数,由欧拉定理可知G^ 阅读全文
posted @ 2017-07-17 16:22 ONION_CYC 阅读(398) 评论(0) 推荐(2)
摘要:【算法】中国剩余定理 【题意】给定n件物品分给m个人,每人分到wi件,求方案数%p。p不一定是素数。 【题解】 首先考虑n全排列然后按wi划分成m份,然后对于每份内都是全排列,除以wi!消除标号影响,注意剩余的(n-W)也视为一份。 所以ans=n!/(w1!w2!...wm!(n-W)!)%p 也 阅读全文
posted @ 2017-07-16 22:18 ONION_CYC 阅读(568) 评论(0) 推荐(3)
摘要:【算法】欧拉函数 欧拉线性筛 【题解】将图从左至右,从下至上,分别标号0~n-1。 除了坐标0,一个点会被观察到当且仅当其坐标(i,j)的i与j互质,否则会被(i/d,j/d)挡住。 所以累加2~n-1的欧拉函数,再在处理左下角三个点即可。 #include<cstdio> #include<alg 阅读全文
posted @ 2017-07-08 15:09 ONION_CYC 阅读(160) 评论(0) 推荐(0)
摘要:【算法】组合数取模——lucas定理 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int p=10007; int fac[p+10],inv[p+10]; void gcd(in 阅读全文
posted @ 2017-07-08 14:13 ONION_CYC 阅读(218) 评论(0) 推荐(0)
摘要:【算法】数学 【题解】 1.平均数:累加前缀和。//听说要向下取整? 2.中位数:双堆法,大于中位数存入小顶堆,小于中位数存入大顶堆,保证小顶堆内数字数量≥大顶堆,奇数则取小堆顶,偶数则取两堆顶/2。 3.方差=(平方的均值)-(均值的平方),即对于a,b,c,s2=(a2+b2+c2)/3-((a 阅读全文
posted @ 2017-06-20 13:10 ONION_CYC 阅读(344) 评论(0) 推荐(0)
摘要:【算法】简单数学 【题解】 对于A*B=C C中第i行第j列的数字由A中第i行和B中的j列的数字各自相乘后相加得到。 所以两个矩阵能相乘要求A的列数等于B的行数,复杂度为O(n3)。 #include<cstdio> #include<algorithm> #include<cstring> usi 阅读全文
posted @ 2017-06-06 21:13 ONION_CYC 阅读(161) 评论(0) 推荐(0)
摘要:【算法】数学 【题解】斯特林公式: #include<cstdio> #include<algorithm> #include<cmath> using namespace std; const double pi=3.1415926535898,e=2.718281828459; int main 阅读全文
posted @ 2017-06-06 20:43 ONION_CYC 阅读(476) 评论(0) 推荐(1)
摘要:【算法】数学 #include<cstdio> #include<cmath> bool ok(int x) { int m=(int)sqrt(x+0.5); for(int i=2;i<=m;i++) { if(x%i==0)return 0; } return 1; } int main() 阅读全文
posted @ 2017-06-02 22:01 ONION_CYC 阅读(253) 评论(0) 推荐(0)

上一页 1 ··· 3 4 5 6 7 8 下一页