数论
yrleep
大学毕业不久,ios游戏自由开发者。
展开
-
poj 3663 Costume Party 二分
简单二分 二分的写法还是比较多的 #include #include #include #include using namespace std; const int maxn=222222; int a[maxn]; int ans; int n,s; int work(int tmp) { int st=1,end=n,mid; while(st { m原创 2013-04-14 19:40:37 · 644 阅读 · 0 评论 -
hdu 4704 费马小定理
费马小定理+快速幂 费马小定理可以用来求解a的高次幂mod质数的值。前提是a与质数互质。 #include #include #include using namespace std; const int maxn=1e6+9,mod=1e9+7; char a[maxn],s[111]={0,'1','0','0','0','0','0','0','0','0','6'}; bool原创 2013-11-20 14:42:37 · 1083 阅读 · 0 评论 -
hdu 4790 Just Random 数论
成都赛区的j题,表示没有想到太好的做法,就用了个比较麻烦的,先把问题转换成%p==0的 a+=p-m; b+=p-m; m=0; #include #include #include #define ll long long using namespace std; long long a,b,c,d,p,m; long long x,y; long long cal(ll a,l原创 2013-11-18 19:17:53 · 1342 阅读 · 0 评论 -
hdu 4779 Tower Defense
组合数学的题目,很明显这个题目的难点在于重塔的设定,所以一定要从重塔下手,但是一直因为一个误区没找到办法。 题解的办法,先枚举有两个重塔的行和列,再枚举独占行列的塔中的重塔数量。 #include #include #include using namespace std; const int maxn=2e2+9,mod=1e9+7; int n,m,p,q; long long pp原创 2013-11-18 17:18:55 · 1507 阅读 · 0 评论 -
poj 2992 Divisors 简单数论
统计出质因数的个数,然后乘一下就可以了。 但是数据量非常巨大,预处理出连续段的质因数的个数。 #include #include #include using namespace std; const int maxn=500; int cnt[maxn][maxn]; int n,m; void cal(int t,int tmp) { int tt=t; for(原创 2013-10-22 20:12:32 · 888 阅读 · 0 评论 -
2013 长沙网络赛 B 题 Bizarre Routine
题解 http://blog.csdn.net/u010257508/article/details/11936129 #include #include #include using namespace std; const int maxn=1e4+9; int mint[maxn],maxt[maxn],ans[maxn]; int n,t,a,b; void dfs(int原创 2013-09-25 23:09:26 · 842 阅读 · 0 评论 -
hdu 4710 Balls Rearrangement 数论
这个公倍数以后是循环的很容易找出来,然后循环以内的计算是打表找的规律,规律比较难表述,自己看代码吧。。 #include #include #include using namespace std; const int maxn=1e6+9; struct { int to,next; }e[maxn*2]; int head[maxn],lon; bool text[maxn];原创 2013-09-08 21:53:16 · 996 阅读 · 0 评论 -
poj 3286 How many 0's?
统计每一位上的零的个数 #include #include using namespace std; long long cal(long long n) { n++; long long ans=n/10+(n%10>0); long long tmp=100; while(n/tmp) { long long txt=n-tmp;原创 2013-06-27 17:00:46 · 686 阅读 · 0 评论 -
poj 1061 青蛙的约会 扩展欧几里得
第一次做扩展欧几里得。 x+mt=y+nt+kl 化成 x-y=(n-m)*t+kl 对右式做扩展欧几里得算法。若gcd(n-m,l)不能整除(x-y)。即不能相遇。 若能整除 则找到了一组解 现在要求最小的整数解。因为解群满足 (x+lcm/(n-m)*k)*(n-m)+(y+lcm/l*k)*l=d。 所以x对lcm/(n-m)取模则为答案。若取模小于等于0 需要再加lcm/原创 2013-04-30 02:00:56 · 1110 阅读 · 2 评论 -
poj 2409 Let it Bead
组合数学的题目 想学好得好好看看 burnside,polya定理,和它的推导。 #include #include #include using namespace std; int po(int t,int p) { int tmp=t; for(inti=2;i tmp*=t; return(tmp); } i原创 2013-04-14 19:40:44 · 482 阅读 · 0 评论 -
poj 3252 Round Numbers 组合数学
组合数学的题目。 公式自己推,注意边界条件。 #include #include #include using namespace std; const int maxn=101; int a[maxn]; long long cal(int a,int b) { if(b>a-b) b=a-b; long long ans=1;原创 2013-04-27 00:26:04 · 1014 阅读 · 0 评论 -
Codeforces Round #178 组合数学
组合数学的问题。 这个公式还是蛮好推的,但是描述起来困难。设关闭着的灯有n个,没有限制的时候共有n!种方法,但是每个区域的灯都有一定的限制,所以除以每个区域的灯的阶乘。最后再把每个区域的点法乘上去。 计算的时候还有个问题,有乘有除,我采取了先约分的办法,然后再计算各个因子的乘积。 #include #include #include #include原创 2013-04-14 19:41:03 · 613 阅读 · 0 评论 -
poj 1150 数论
排列数的最后一个非零数字 一个做了好久的题目 2*5会产生0,其余的因子都不能 所以把所有的因子2 5提取出来,然后统计剩下的37 9的个数,自己计算循环节及可得出答案。 #include #include #include using namespace std; const int maxn=10+9; int c原创 2013-04-14 19:41:07 · 712 阅读 · 0 评论 -
poj 2479 Maximum sum
题目意思不再重复,先解决一个最长段的问题,从头开始累加,加一次更新一次最大值,当sum 现在解决两个段的问题,和最大的两个子段(A,B),要么都跟最长段(T)没有交集,要么把最长段一分为二。 简单证明下:如果跟最长短相交的话,那么设相交的为A,那么设A减去A和T的交集的字段和为sum 如果sum 如果sum>0 那么把这段加到T上面能得到更大的连续子段,矛盾。 证毕。 #i原创 2013-04-16 23:55:23 · 852 阅读 · 0 评论 -
poj 3233 Matrix Power Series
二分+快速幂 #include #include #include using namespace std; const int maxn=33; int n,k,mod; typedef struct matrix { int data[maxn][maxn],size; matrix(int n) { siz原创 2013-04-24 18:12:08 · 737 阅读 · 0 评论 -
poj 3070
矩阵加速 #include #include #include using namespace std; int c[101][3][3],b[3][3],d[3][3],lon; int n; void dfs(int k) { if(k==1) { lon++; for(int i=1原创 2013-04-23 18:28:28 · 807 阅读 · 0 评论 -
poj 1850 Code 递推
题目意思简单明了,求由小写字母组成的数列的顺序号 a - 1 b - 2 ... z - 26 ab - 27 ... az - 51 bc - 52 思路: 非常直接的做法 从最高位开始,求出把该位减小后能得到的数列数,最后再加上位数比他小的那些数列数目。 #include #include #include using namespace std原创 2013-04-14 19:40:31 · 451 阅读 · 0 评论 -
hdu 4059 The Boss on Mars 容斥原理
容斥原理的题目,用容斥来做还是比较明显,关键是要去推那个4次方的公式。 然后注意公式里面要除以30,那么就先求%(mod*30),然后再除以30再%mod。 #include #include #include #include #define ll long long using namespace std; const ll mod=1e9+7; int a[1111],lon;原创 2013-11-23 20:30:57 · 942 阅读 · 0 评论