- 博客(27)
- 资源 (3)
- 收藏
- 关注
原创 pollard_rho大数分解Java版
代码:import java.math.BigInteger;import java.security.SecureRandom; class PollardRho{ private final static BigInteger ZERO = new BigInteger("0"); private final static BigInteger ONE
2013-07-31 19:05:12 2034
原创 任意给4条边求形成四边形面积最大值
题目:任意给4条边求形成四边形面积最大值。结论:形成的四边形的四个顶点都在它的外接圆上,面积S满足:其中这也即是圆内接四边形的面积公式。证明过程:首先我们把四边形的四个顶点和四条边顺次分别记为:A,B,C,D和a,b,c,d,角B和D分别记为,设面积为S这样就可以写推导过程了:,亦即 (1)
2013-07-29 13:19:31 14468 3
原创 HDU4382(特殊的矩阵连乘)
题目:Harry Potter and Cyber Sequence Generator题意,有两个容器C1,C2,初始的时候C1中有一个数的值为V,给你K个操作,每次都重复这K个操作N遍,最后问你C2中的数是 多少。N1:循环操作的次数巨大,敏感的想到这是矩阵连乘的题目。2:K个操作可以得出一个矩阵,N个K操作就是这个矩阵的N次方3:最后再乘以初始矩阵
2013-07-29 09:21:35 1505
原创 连分数
对于连分数,我们可以表示为:对于无理数,ai一定是无穷数列,反之,对于有理数,ai一定是有穷数列。对于上式中的p与q,有递推式:而对于sqrt(n)来说,ai中的首项为一个单独的整数,除了它后面的都会循环。下面我们来分析一个关于连分数的题目。题目:连分数题意:给两个整数n和k,n分子分母对1000000007取
2013-07-27 19:11:50 4607
原创 x^A=B(mod C)的解 (离散对数与原根)
题目:Broot题意:给出k,m,newx的值,求方程x^k(mod m)=newx的解,其中m为素数。解法步骤:(1)先暴力求m的原根g(2)大步小步求g^t1(mod m)=newx(3)则g^(t1+n*t2)(mod m)=newx,t2=p-1(4)x=g^y(mod m),x^k=(g^y)^k=g^(yk)=g^(t1+n*t2)那么就是求
2013-07-26 20:49:17 6946 1
原创 高次同余方程式的解数及解法
定理一:若是k个两两互质的正整数,,则同余式 (1)与同余式组 (i=1,2,3,...,k) (2)等价,并且若用表示对模的解数,T表示(1)式对模m的解数,则:所以求多项式的解可以用上述方法,先分解分别求出各个解再合并。定理二:p是
2013-07-26 18:41:15 13699
原创 各种排序的原理
1.选择排序: 首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换; 再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换; 重复上述操作,共进行n-1趟排序后,排序结束。void Selesort(int *Array,int n){ int i,j,k,tmp; for(i=0;i<n-1;i
2013-07-26 11:10:33 3164
原创 HDU4611(找循环节)
题目:Balls Rearrangement#include #include #include using namespace std;typedef long long LL;LL n,a,b,x,y,s,t;LL gcd(LL a,LL b){ return b? gcd(b,a%b):a;}int main(){ int T;
2013-07-25 10:52:09 1773
转载 HDU4604(双端队列与DP)
题目:Deque #include #include #include #include #include #include #define maxn 100010using namespace std;int val[maxn];int N;void DP(int num[],int dp[],int same[]){ int
2013-07-24 12:45:10 1495
原创 HDU4607(求树中的最长链)
题目:Park Visit题意:给定一棵树,从树中的任意选一个顶点出发,遍历K个点的最短距离是多少?(每条边的长度为1)解析:就是求树的最长链,假设求出的树的最长链所包含的点数为m,那么如果K#include #include #include using namespace std;const int N=200010;int head[N],
2013-07-23 18:24:45 4390
原创 NEFU709(第K个圆的半径)
题目:The Kth Circle 题意:平面上给定n个点的坐标,我们可以选其中3点构成一个圆,当然也就有3段弧,我们定义第K个圆满足条件:(1)除了已选的3个点,剩下的n-3个点中有K个点在圆内,有n-K-1个点在圆外(2)保证所有的点在圆的三条弧中其中一条弧的一侧解析:本题实际上就是得到这样一个结论,满足条件的圆其中有两点一定在这些点的凸包上,并且这两点相邻,这样我
2013-07-22 20:00:16 1152
原创 BZOJ3231(矩阵连乘,稍有点复杂)
题目:3231: [Sdoi2008]递归数列 题意:一个由自然数组成的数列按下式定义: 对于i :ai = bi对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k其中bj和cj (1)是给定的自然数。写一个程序,给定自然数m <=n, 计算am +am+1 + am+2 + ... + an,并输出它除以给定自
2013-07-22 15:45:17 2035
原创 最小覆盖圆的增量算法
题意:给出平面上的一些点,要求用一个最小的圆,把所有的点包围起来。最小覆盖圆, 增量法:假设圆O是前i-1个点得最小覆盖圆,加入第i个点,如果在圆内或边上则什么也不做。否,新得到的最小覆盖圆肯定经过第i个点。然后以第i个点为基础(半径为0),重复以上过程依次加入第j个点,若第j个点在圆外,则最小覆盖圆必经过第j个点。重复以上步骤(因为最多需要三个点来确定这个最小覆盖圆,
2013-07-22 11:33:33 7976
原创 hdu3007(最小覆盖圆问题)
题目:Buried memory 最小圆覆盖,很经典的问题。题目大概是,平面上n个点,求一个半径最小的圆,能够覆盖所有的点。 如果要求一个最小覆盖圆,这个圆至少要由三个点确定。有一种算法就是任意取三个点作圆,然后判断距离圆心最远的点是否在圆内,若在,则完成;若不在则用最远点更新这个圆。这里不仔细介绍。 这里介绍的算法是,先任意选取两个点,以这两个点的连线为直径作圆。
2013-07-22 11:17:02 3805
原创 HDU4367(线段相交与斐波那契数列)
题目:The war of virtual world 题意:在平面内给n个点的坐标,n小于等于200,在这n个点中先选两个点a,b,有(n-1)*n/2种,对于每一种情况,分别求出Ki,Ki等于选定的a,b直线与剩下的点的交点数,求表达式:的值。 #include #include #include #include using namespace s
2013-07-21 21:04:55 1276
原创 HDU4364(模拟矩阵乘法)
题目:Matrix operation 本题就是直接模拟矩阵乘法即可,主要是这里对十六进制的处理有技巧。#include #include #include using namespace std;int a[4][4];int ans[4][4];int x[4][4]={ 0x2,0x3,0x1,0x1, 0x1,0x2,0x
2013-07-21 19:16:38 1156
原创 素数与线性筛选法初级版
题目:不可摸数 题意:s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数.包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数,如果n是不可摸数,输出yes,否则输出no#include #include #include #in
2013-07-21 10:45:12 2143
转载 HDU4357(数学思维题)
题目:String change 把26个字母看成0~25对应的数字,当数慢慢增大时就对26取模,则字符串有一个总和s1,要使其变为末状态的总和s2;那么每交换一次s1要加2,故,s1+s2必须为偶数。两个字母单独处理,两个以上时,以三个数字为例,(a,b,c)为三个数,则有(a,b,c)->(a,c+1,b+1)->(c+2,,a+1,b+1)->(c再分别和a,b各交换12次,
2013-07-20 14:41:01 1940
原创 HDU4099(斐波那契数列与字典树)
题目:Revenge of Fibonacci 题意:给出斐波那契数列的前k位,k不超过40,找出最小的正整数n,满足F(n)的前k位与给定数的前k位相同,斐波那契数列的项数不超过100000。 解析:本题可以分为两步:第一步就是预处理出100000项斐波那契数列的前40位,插入到字典树中。第二步就是查询匹配求最小的n。对于第一步,我们可以把斐波那契数列精确到50多位,
2013-07-20 13:08:11 3172
原创 HDU4353(找一个三角形面积与它里面包含点的比值最小)
题目:Finding Mine 题意:给你n个点,m个金矿点,找一个多边形,使得多边形的面积除以这个多边形内的金矿点个数的比值最小。思路:其实就是找一个比值最小的三角形就行了,因为其他的三角形的比值都比它大,组合成多边形后势必会将比值变大。可以简短的证明的。#include #include #include #include #include using
2013-07-19 21:12:43 1540
原创 HDU4389(数位DP)
题目:X mod f(x) 题意:问在区间[A,B]之间,有多少个数满足,x%f(x)=0,f(x)代表x的各位数字之和。 解析:本题一是可以通过打表来计算,二是可以通过数位DP来求解。我们先来说打表吧。。。对于打表,当然我们不能直接打,这里有技巧。我们可以这样:每隔100000我们统计一次,这样在10^9范围内,我们得到10000个数。然后就很好解决了。。。#in
2013-07-13 15:15:12 20014 1
原创 HDU4324(强连通的Tarjan算法)
题目:Triangle LOVE 题意:给一个图,问是否存在三个点构成的环。只需求出极大连通分量,判断它的顶点是否大于等于3,如果是存在,否则不存在。#include #include #include using namespace std;const int N=2005;int head[N],low[N],dfn[N],stack[N];
2013-07-10 20:29:58 1900
原创 POJ1734(floyd求最小环的路径)
题目:Sightseeing trip 题意:求一个图中最小环,输出路径。#include #include #include using namespace std;const int N=105;const int INF=9999999;int map[N][N],dist[N][N];int road[N][N],path[N];in
2013-07-10 16:16:21 2939
原创 (HDU4324)判断一个图中是否存在两点的出度相同
本问题很简单,对于图中我们先用一个数组统计每个点的出度大小,然后排序,然后就可以看是否存在相邻的两个数组值是否相等就行了。#include #include #include #include using namespace std;const int N=2500;int out[N];char str[N][N];int main(){
2013-07-10 14:29:43 1568
原创 HDU4321(位运算二进制1的统计)
题目:Arcane Numbers 2 #include #include #include using namespace std;typedef long long LL;void Solve(LL a,LL b,LL n){ LL cnt=0; LL max=b+a*n; for(LL i=0;i<64;i++)
2013-07-10 14:01:11 1816 1
原创 大数开方(Java版)
题目:大数开方 Java代码:适合被开方数不超过1000位的。import java.util.*;import java.math.*;public class Main{ public static void main(String[] args) { Scanner cin=new Scanner(
2013-07-09 20:34:48 4164
原创 HDU3929(容斥原理)
题目:Big Coefficients 题意:F(x) = (1+x)^a1 + (1+x)^a2 + ... + (1+x)^am,求系数是奇数的项的个数。容斥原理:递归形式dfs(int beg,set S,int sym){ ans+=num(S)*sym; for(int i=beg;i<=n;i++) dfs(i,S∩A[i
2013-07-09 13:02:50 1966
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人