![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数学
vufw_795
Mood decides everything.
展开
-
UVA 11300(数学)
题目链接:UVA 11300 (on vjudge)解题思路: 首先要使用递推推出每个人给了前一个人多少金币的公式,然后将问题转化成求数列中位数的问题(数轴上找一个到所有点距离和最小的点,这个点就在中位数的位置)代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespac原创 2015-10-26 13:11:58 · 426 阅读 · 0 评论 -
UVALIVE 3516(DP)
题目链接:UVALIVE 3516解题思路: 大白书上题目,思路当然是枚举所有情况,实现即记忆化搜索或者动态规划。具体的做法就是枚举根结点最左边的结点,右边的所有结点情况随意,递归调用即可。dp[i][j]表示以S[i]根结点的多叉树的情况代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>原创 2016-03-25 23:24:45 · 663 阅读 · 0 评论 -
数论之原根
简介: 原根是数论中一个非常重要的概念,它在密码学中有着很广泛的应用。原根从直观上非常好理解,数g对与p是原根,则(g^i)%p的结果互不相同,其中,i ∈ [1, p-1], g ∈ [2, p-1]。原根与整数的阶的关系非常密切,下面先从整数的阶讲起。原创 2016-03-15 14:43:05 · 7986 阅读 · 0 评论 -
数论之欧拉函数
定义:欧拉函数φ(n),表示小于或等于n的数中与n互质的数的数目。 性质: 1) φ(1) = 1 2) 若n是质数p的k次幂,φ(n) = (p - 1)^(k - 1) 3) 若m, n互质,φ(m*n) = φ(m) * φ(n)原创 2015-11-06 22:51:05 · 1223 阅读 · 0 评论 -
URAL 1113(数学)
题目链接:URAL 1113解题思路: 这道题目其实是一类经典题目来着,是一道极限问题,即穿越沙漠问题,这种题目都是求在油箱容量受限的前提下,车辆如何走一段比较长的路的问题。一开始想没有想出来,后来看到这篇博客,就懂了。 这题为了使耗油量最小,很显然需要让车走最少的路程,因此必须每次启程,都能让油箱填满。所以可以使用倒推法进行求解,从最后一个油站开始,前一个油站总是要比后一个油站多储存等同于油箱原创 2016-03-01 08:54:09 · 661 阅读 · 0 评论 -
POJ 2096(概率DP)
题目链接:POJ 2096解题思路: 总的来说状态方程还是蛮好想的,每次找bug的时候,有可能会出现四种情况,一是在已经找到bug的系统中找到了旧bug,二是在新的系统中找到旧bug,三是在已经找到bug的系统中找到了新bug,二是在新的系统中找到新bug。于是,状态dp[i][j]表示在 j 个系统中找到 i 个bug需要的天数期望,初始状态dp[0][0]=0,状态转移方程如下:dp[i][j原创 2016-02-24 16:48:31 · 564 阅读 · 0 评论 -
UVA 11021(概率DP)
题目链接:UVA 11021解题思路:这题算是一道很经典的概率入门题了吧,不过首先得知道可以用pow函数。虽然题目中讲的是K个毛球,但是其实可以考虑一个毛球的情况,之后作K次方即为答案。原创 2016-03-07 15:57:21 · 561 阅读 · 0 评论 -
数论之欧几里德算法(一)
简介: 欧几里德算法,又称辗转相除法,是求解最大公约数的算法。定理: 欧几里德算法的理论支撑为GCD递归定理,下面介绍这个定理。 GCD递归定理: 对任意非负整数a和任意正整数b,gcd(a , b) = gcd(b , a%b)代码: 由上述定理,我们可以直接得出gcd函数的代码:int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}扩原创 2015-07-19 13:05:16 · 1124 阅读 · 0 评论 -
数论之欧几里德算法(二)
简介: 扩展欧几里德算法,是重写欧几里德算法以计算出额外有用信息的一种形式。算法用于计算满足下列条件的整系数x与y: d = gcd(a , b) = ax + by实现: 根据GCD递归定理,我们有:gcd(a , b) = gcd(b , a%b),我们将使用该定理来推导扩展欧几里德算法: gcd(a , b) = ax + by gcd(b , a%b) = bX + (a%b原创 2015-07-19 13:38:12 · 872 阅读 · 0 评论 -
数论之欧几里德算法(三)
简介: 模线性方程,指形如:ax ≡ b(mod n) 的方程,在现实中有若干应用,例如在RSA公钥加密系统中的密钥查找。该方程可用扩展欧几里德算法求解,解的大小范围为[ 0 , n )。算法: 运用扩展欧几里德算法解模线性方程其实是基于群论的,在这里不再赘述,如果把解的区间限制在整数范围内,那么方程有无穷解或者无解。因为无穷解在实际中并没有太大作用,所以我们一般考虑区间[ 0 , n )。原创 2015-07-19 18:05:12 · 685 阅读 · 0 评论 -
数论之欧几里德算法(四)
简介:欧几里德算法的应用题目链接:poj 1061解题思路: A = m - n , B = y - x , N = L , 题目转化为求解模线性方程Ak ≡ B(mod N) 预处理:若m小于n,交换m与n,x与y代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using names原创 2015-07-19 20:23:51 · 604 阅读 · 0 评论 -
URAL 1104(数论)
题目链接:URAL 1104解题思路: 思路就是简单的模运算规则:( a * b ) % c = ( ( a % c ) * (b % c ) ) % c 根据上述规则,有如下规律:( a * b^n ) % ( b - 1 ) = a % ( b - 1 ) 所以只要所有位上数字之和为b-1的倍数即可。代码:#include <cstdio>#include <cstring>#incl原创 2015-09-28 22:42:02 · 496 阅读 · 0 评论 -
HDU_1576(乘法逆元)
题目链接:HDU_1576题目说明: 乘法逆元的应用,测一发模板(用模线性方程做的)代码:#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;long long extend_gcd(long long a,long lo原创 2016-01-01 12:25:58 · 579 阅读 · 0 评论 -
威佐夫博弈(介绍)
题目大意: 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子,游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者,现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 这就是著名的威佐夫博弈,这里列出几种先手必败的局势,(1,2),(3,5),(4,7),原创 2015-11-01 20:00:03 · 604 阅读 · 0 评论 -
素数筛法
平常的素数求法太慢了,所以需要加一下速。第一种,筛法的最基本做法,但是效率不是很高:bool prime[MAXN+5];int ans[MAXN+5],cnt;void getPrimeSlower(int n){ memset(prime,1,sizeof(prime)); cnt=0, prime[0]=prime[1]=0; for(int i=2;i<=n;i+原创 2015-10-31 12:07:37 · 609 阅读 · 0 评论 -
sicily 1047(数学)
题目链接:sicily 1047解题思路: 题意很简单,即需要把一串连续的不超过25个的整数分成A、B两部分,分别相加得到两个数sumA、sumB,使得a+sumA=b+sumB。 一眼看过是感觉是0-1背包,但是其实不太一样,因为所有的整数是连续的,所以可以有更方便的方法解决。 假设第一个数为low,最后一个数为high,我们可以得到如下定理: 当A部分有 i 个数时,当且仅当(low+l原创 2016-05-01 16:04:48 · 620 阅读 · 0 评论