数论
yrleep
大学毕业不久,ios游戏自由开发者。
展开
-
poj 3663 Costume Party 二分
简单二分二分的写法还是比较多的#include#include#include#includeusing namespace std;const int maxn=222222;int a[maxn];int ans;int n,s;int work(int tmp){ intst=1,end=n,mid; while(st { m原创 2013-04-14 19:40:37 · 629 阅读 · 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 · 1065 阅读 · 0 评论 -
hdu 4790 Just Random 数论
成都赛区的j题,表示没有想到太好的做法,就用了个比较麻烦的,先把问题转换成%p==0的a+=p-m;b+=p-m;m=0;#include #include #include #define ll long longusing 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 · 1319 阅读 · 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 · 1487 阅读 · 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 · 875 阅读 · 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 · 828 阅读 · 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 · 982 阅读 · 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 · 670 阅读 · 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 · 1094 阅读 · 2 评论 -
poj 2409 Let it Bead
组合数学的题目想学好得好好看看 burnside,polya定理,和它的推导。#include#include#includeusing 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 · 462 阅读 · 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 · 1000 阅读 · 0 评论 -
Codeforces Round #178 组合数学
组合数学的问题。这个公式还是蛮好推的,但是描述起来困难。设关闭着的灯有n个,没有限制的时候共有n!种方法,但是每个区域的灯都有一定的限制,所以除以每个区域的灯的阶乘。最后再把每个区域的点法乘上去。计算的时候还有个问题,有乘有除,我采取了先约分的办法,然后再计算各个因子的乘积。#include #include #include #include原创 2013-04-14 19:41:03 · 596 阅读 · 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 · 694 阅读 · 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 · 832 阅读 · 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 · 721 阅读 · 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 · 794 阅读 · 0 评论 -
poj 1850 Code 递推
题目意思简单明了,求由小写字母组成的数列的顺序号 a - 1 b - 2 ... z - 26 ab - 27 ... az - 51 bc - 52思路: 非常直接的做法 从最高位开始,求出把该位减小后能得到的数列数,最后再加上位数比他小的那些数列数目。#include#include#includeusing namespace std原创 2013-04-14 19:40:31 · 444 阅读 · 0 评论 -
hdu 4059 The Boss on Mars 容斥原理
容斥原理的题目,用容斥来做还是比较明显,关键是要去推那个4次方的公式。然后注意公式里面要除以30,那么就先求%(mod*30),然后再除以30再%mod。#include #include #include #include #define ll long longusing namespace std;const ll mod=1e9+7;int a[1111],lon;原创 2013-11-23 20:30:57 · 924 阅读 · 0 评论