紫书第10章Math专题
文章平均质量分 67
Masamiiiii
这个作者很懒,什么都没留下…
展开
-
Uva 11582(Fibonacci循环节)
点击打开链接求fib[a^b]%n (a,b构造F[i]=fib[i]%n -> F[i]=(fib[i-2]+f[i-1])%n=(fib[i-2]%n+fib[i-1]%n)%n=(F[i-2]+F[i-1])%n如果F[x-1]=F[i-1] &&F[x-2]=F[i-2] 则F[x]=F[i] F[x+1]=(F[x]+F[x-1)%n=F[i+1].....则找到循环节长度为原创 2016-10-09 18:29:48 · 310 阅读 · 0 评论 -
uva 10622 Perfect Pth Power(算数基本定理)
点击打开链接给出n,求n=b^d的最大d分解n=p1^ap2^bp3^c..要使n=(p1^(a/d) p2^(b/d) p3^(c/d))^d&&d最大 则d为cnt个因子 幂的gcd#include #include #include using namespace std;typedef long long ll;const int N=333333;int原创 2016-10-27 13:15:32 · 451 阅读 · 0 评论 -
uva 294 Divisors 求因子个数
点击打开链接//因子个数函数为乘性函数//或者说选出一个因子的方法数有ans种 每种方法中因子都不同 所以因子个数有ans个#include #include #include using namespace std;typedef long long ll;const int N=333333;int p,num;int prime[N+20],vis[N+20],原创 2016-10-27 13:55:21 · 329 阅读 · 0 评论 -
uva 12063 Zeros and Ones dp记忆化
点击打开链接求n位二进制数 0和1个数相等&&能被k整除&&无前导0 dp[zero][one][r] 0,1个数和余数 从1开始向末尾添加0或1即可// x%k=r// r,x同余k/添加0:2*r,2x同余k //新的余数为(2*r)%k,添加1同理 #include #include #include using namespace std;ty原创 2016-11-08 12:36:09 · 365 阅读 · 0 评论 -
uva 11105 Semi-Prime H-number 筛法
点击打开链接#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e6+1;const ll inf=1<<30;vector h;int vis[N];ll pri[N];int main(){ int n;原创 2016-11-08 15:56:17 · 280 阅读 · 0 评论 -
uva 1644 Prime Gap 二分
点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=1e5+20;const ll M=1299709;vector p;ll n;bool check(int x){ for(int i=2;i*i<=x;i++) { if(x%i==0)原创 2016-10-27 19:40:42 · 434 阅读 · 0 评论 -
uva 11181 Probability|Given 条件概率
点击打开链接//求在r个人买东西的情况下 第i个人买东西的概率//p(Ei|E)=p(EiE)/p(E) //枚举r个人买东西的情况 利用全概率 算出P(E) //n=4 r=2例如P(E2E)=P(1100)+P(0110)+P(0101) //P(EiE) 画个维恩图就知道了->P(EiE)为状态不同E中a[i]=1的累加和 //即全概率中对E进行划分-> P(Ei原创 2016-10-19 11:06:12 · 309 阅读 · 0 评论 -
uva 1213 sum of different primes 01背包(二维)
点击打开链接#include #include #include #include #include using namespace std;typedef long long ll;const int N=1120;vector p;//素数表ll dp[210][16][N+1];//dp[i][j][n] 前i个选j个和为n的方法数 int size,n,k原创 2016-10-20 11:00:52 · 331 阅读 · 0 评论 -
uva 10539 Almost Prime 暴力
点击打开链接//求(l,r)内r//则满足条件的素因子 若素因子大于10^6则要么为素数要么含有另外一个#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e6;vector p;//10^12内只有一个素因子&&不是原创 2016-10-20 12:34:48 · 406 阅读 · 0 评论 -
uva 1210 sum of CONSECUTIVE prime num 暴力or尺取
点击打开链接法1打表:可以间接的由prime来更新ans(枚举连续和的长度和起点即可) 法 2sum of CONSECUTIVE 尺取#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e4;vector p;l原创 2016-10-20 13:29:34 · 370 阅读 · 0 评论 -
uva 11526 H(n)(公式优化)
点击打开链接求s=n+n/1+n/2+....n/(n-1)+n/n;nn=20 s=20+10+6+4+4+3+2+2+2+2+1+1+1+1+1+1+1+1+1+1因为下取整原因 许多项都会相同 把相同项乘起来以后,跳着加 时间复杂度i从小到大 若第一次n/i=t 则当前i为满足(下取整)n/i=t的最小i n/i=t.Bi增加&&n/i=t(下取整) n/i=t.B原创 2016-10-31 21:32:52 · 319 阅读 · 0 评论 -
uva 1649 Binomial coefficients 枚举+二分
点击打开链接#include #include #include #include #include #include #define M(a,b) make_pair(a,b)#define pll pairusing namespace std;typedef long long ll;const int N=1e3+20;ll m;priority_queue,原创 2016-11-16 13:59:11 · 466 阅读 · 0 评论 -
uva 1647 高精度+递推
点击打开链接#include #include #include #include #include using namespace std;const int N=1e3;int a[N+20][150],b[N+20][150]; //a[i] i次变化后1的个数 ,b[i] i步操作后00的个数// 0->10 1->01 初始为1,求i步后00的个数//1->01-原创 2016-11-13 11:09:17 · 560 阅读 · 0 评论 -
hdu 4472 Count 递推
点击打开链接 //去掉根节点后若有M个子节点则 为了使到同一层的节点所拥有的子节点数相等,M个子树包含的节点数相等 (i-1)%M=0&&子树也要满足条件则dp#include #include #include #include #include #include #include #include using namespace std;typedef l原创 2016-11-02 09:03:55 · 360 阅读 · 0 评论 -
uva 10837 A Research problem 欧拉函数+暴力
点击打开链接m=phi(n)=p1^a1-1(p1-1).....pn^an-1(pn-1)n中的所有素因子p必须满足m%(p-1)==0这一条件。因此可以事先将所有这样的素数找出来,然后在这些素数的基础上进行暴力搜索#include #include #include #include #include #include using namespace std;co原创 2016-11-13 22:52:21 · 400 阅读 · 0 评论 -
uva 1648 Business Center 数学+二分
点击打开链接 pu+q(-d)=ans>1&&ans尽量小 //D=gcd(u,d) D|ans 则枚举ans,logn 判断ans是否满p+q=n ,pu+q(-d)=ans//二分求出p即可 总的时间复杂度O(mlog(n)log(n))#include #include #include using namespace std;typedef long long原创 2016-11-14 19:17:01 · 441 阅读 · 0 评论 -
UVA 11440 Help Tomisu 数论+欧拉函数
点击打开链接//求2~n!中x所有素因子都大于m的x个数//m!=1*2..*m 若x的素因子都大于m 则gcd(x,m!)=1 (把x,m!分别用素因子乘积表示) //即求2~n!中与m!互质的x的个数 若x>m! gcd(x,m!)=gcd(m!,x%m!)//则只要求出小于m!&&与m!互质的个数(一个剩余系)在乘上n!/m!即可 //p[m]=phi[m!]=原创 2016-11-07 12:33:03 · 474 阅读 · 0 评论 -
uva 557 Buger 概率
点击打开链接题意Ben和Bill是一对双胞胎,生日那天他们请了2n个朋友(包括他们自己,题目给出的即为2n),然后有n个汉堡和n个三明治,然后由Ben的左边开始分食物,每个人选取食物的方式是先丢硬币,正面汉堡,反面是三明治,问最后双胞胎兄弟那道同一种食物的概率。直接算的话 coin还要分在什么时候停下晕了 ..算对立事件 最后两个人拿不一样的buger,即最后剩下两个不同的buger,原创 2016-11-06 20:51:35 · 343 阅读 · 0 评论 -
UVA 1262编码(第k字典序)
点击打开链接我们先统计分别在每一列均在两个矩阵出现的字母,然后从小到大排好序。对于第一个样例来说,我们得到ACDW、BOP、GMOX、AP、GSU第一个字母无论以什么开头 后面都有3*4*2*3=72种可能 当ktot为后面的全排列 tot/=cnt[i] 则第i个字符因取第j个 j=k/tot (下取整,所以k-- 保证(72-1)/72 和(71-1)/72原创 2016-10-15 14:57:03 · 657 阅读 · 0 评论 -
uva 12169 exgcd+构造
点击打开链接参考:点击打开链接枚举a,利用x1,x3求出b,判断所有x的关系能不能满足a,b。如何通过a,x1,x3求出b呢。x2 = (a * x1 + b) % 10001;x3 = (a * x2 + b) % 10001;联立2个式子x3 = (a * (a * x1 + b) % 10001 + b ) % 10001;x3 = (a *原创 2016-10-09 19:27:52 · 313 阅读 · 0 评论 -
uva 10375算术基本定理(约分)
点击打开链接唯一性证明求C(p,q)/C(r,s) p,q,r,s1e4!太大 因为最终ans所以利用算术基本定理分解成素数,记录素数的指数后消去因子 #include #include #include #include #include using namespace std;const int N=1e4+10;int e[N]原创 2016-10-10 17:48:37 · 423 阅读 · 0 评论 -
uva 10791 Minimun Sum Lcm(算术基本定理应用,推荐)
点击打开链接求LCM(x1,x2,...xn)=n 中 sum(x1~xn)的最小值因为[a,b]=n,[a/d,b]=n 所以为了使sum最小->推出最优解(x1,x2...xn)中的任意两个元素无约数(互质)所以将n用算术基本定理分解 n=a1^p1+a2^p2+...an^pn (a,b>=2)时 a+ba1^p1,a2^p2,..an^pn]=n sum显然为ai^pi之原创 2016-10-10 19:54:03 · 403 阅读 · 0 评论 -
UVA 10491 Cows and Cars(全概率)
点击打开链接//对一开始选的门进行划分//r1一开始选到牛switch后选到car 两个独立事件 //r2一开始选到车switch后选到car//switch后还有a+b-c-1个门可以选 #include #include #include #include using namespace std;const int N=1e5+20;int main()原创 2016-10-21 12:26:25 · 262 阅读 · 0 评论 -
UVA 12716 GCD XOR (数论,规律)
点击打开链接//因为二进制异或和减法当做0,1时为1(但减法需要借位!)(0,0)(1,0)(1,1)等价 所以a-b//c=gcd(a,b) a-b=(p-q)c 得到a-b>=c //所以可以推出 c=a-b;//当c=a-b时 gcd(a,b)=gcd(kc,(k-1)c)=c//枚举a c 得b=a-c判断 a^b是否等于c即可 #include #in原创 2016-10-11 21:59:57 · 409 阅读 · 0 评论 -
uva 1636 Headshot 简单概率
点击打开链接P(E)=E/S EVENT/SPACEShoot的概率为第一枪没子弹的前提下的概率,即条件概率设序列中0的个数为cnt 00的个数为zero num(i)为i的个数则P(shoot)=num(00)/num(00)+num(01) = zero/cnt Rotate没子弹的概率为cnt/n#include #include #include #incl原创 2016-10-12 14:12:13 · 354 阅读 · 0 评论 -
uva 12034 Race递推
点击打开链接//f[i] i个人的排名方法数//按第一名进行分类计数 f[i]=c(n,k)*f[n-k](k为第一名人数 k=1~n)#include #include #include using namespace std;const int N=1e3+20;const int mod=10056;typedef long long ll;ll f[N+2原创 2016-10-22 22:29:50 · 346 阅读 · 0 评论 -
uva 580 Critical Mass(递推)
点击打开链接//f[i] i个box 放U和L 至少连续3U的方法数ll g[N+20];//g[i] i个box 放U和L 没有连续3U的方法数 g[i]=2^n-f[i] // 根据第一次出现的连续3U进行分类计数 若i~i+2为3U则i-1只能为L 前面i-2个不能有3U方法为g[i-2] 后面n-i-2个box任意 2^(n-i-2) // f[i]=segam(g[i-2原创 2016-10-22 22:44:18 · 345 阅读 · 0 评论 -
uva 1641 Ascii Area 多边形面积
点击打开链接'\' ,'/'个数为奇数时,多边形还没封闭 此时'.'占据单位面积#include #include #include #include using namespace std;typedef long long ll;const int N=1e3+20;char g[N][N];int h,w;int main(){ while(cin>>h>>原创 2016-11-03 14:18:07 · 303 阅读 · 0 评论 -
hdu 4474 数位搜索bfs
点击打开链接题意:0-9这十个数字里面的若干个数字组合出一个数,使这个数是N的倍数,求最小的这个这样的数,不存在的话输出-1。如果枚举n的倍数 但是不确定到哪里为止输出-1。对于 a,b同余n &&b>a 保留a即可 因为a*10+k,b*10+k同余n,a,b同解所以队列结点保存余数&&由上得:不保存相同余数,BFS时在末尾添加数字生成新的余数,直到余数为0即可原创 2016-11-03 22:42:38 · 385 阅读 · 0 评论 -
uva 11040 规律递推(水)
点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=15;int a[N][N];void print(){ for(int i=8;i>=1;i--) { for(int j=1;j<=i;j++) { if(i%2&&j%2) {原创 2016-10-13 19:32:35 · 352 阅读 · 0 评论 -
uva 10820 send a table (欧拉函数)
点击打开链接#include #include #include using namespace std;const int N=5e4+20;int phi[N+20];// f(x,y)=f(x*k,y*k) 则只保留f(x,y) //所以最后答案中的 x,y为互质的 对x分类计算出答案 void phi_table(int n){ for(int i=2;i<=n;原创 2016-10-14 14:40:49 · 226 阅读 · 0 评论 -
UVA 1608 Pole Arrangement(递推)
点击打开链接dp[i][j][k] 高度1~i 左边看到j根 右边看到k根的方法数 高度2~i的排列数等价于高度1~i-1的排列数(相当于1~i-1每个排列方案中每个高度+1即可) (2~i每个排列方案中高度都-1)考虑2~i放好时(子问题) 插入1到左边,右边和中间i-2个空三个分类即可#include #include #include using namespa原创 2016-10-25 14:30:56 · 380 阅读 · 0 评论 -
UVA 808Bee Breeding(构造 建立坐标系)
点击打开链接#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e5;int dx[5]={-1,0,1,1,0};int dy[5]={1,2,1,-1,-2};struct Point{ int x; int y; P原创 2016-10-25 15:44:12 · 404 阅读 · 0 评论 -
uva 1363 公式求和(优化)
点击打开链接//计算 累加k%i (i:1~n)//n,k//若k/i=p &&k/(i+1)=p//则k%(i+1)=k-(i+1)*p=k-ip-p=k%i-p//即商的整数部分相同的i~j的余数呈等差数列 #include #include using namespace std;const int N=1e3+20;typedef long long原创 2016-11-05 20:22:05 · 357 阅读 · 0 评论 -
uva Crossing Rivers 简单期望
点击打开链接过任意一条河的时间t: v/l所以过任意一条河的时间的期望为: 2v/l在岸上时间是参数为D-l #include #include #include #include using namespace std;const int N=1e3+20;struct node{ double p,l,v; // pos,len,speed}b[N];原创 2016-12-02 22:51:42 · 266 阅读 · 0 评论