算法
文章平均质量分 50
hugedata
这个作者很懒,什么都没留下…
展开
-
霍纳法则{计算多项式的值}
{必修三学过的,但是一直没打过,这是很好的技巧哦}var i,n,x,ans:longint; a:array[1..100] oflongint;{a[1],a[2],a[n]分别为最高次项系数,次高。。。常数项}begin read(n,x); for i:=1 to n do read(a[i]); ans:=a[1]; for i:=1 to n-1 do原创 2013-11-04 21:44:20 · 1157 阅读 · 0 评论 -
线性素数筛
{补充一句,在Eraosthenes筛中,以前一直没想到,对于一个素数p,只需要从p*p,p*(p+1)筛就可以了}var p:array[0..20000] of longint;procedure makeprime;var f:array[1..50000] of boolean; i,j:longint;begin fillchar(f,sizeof(f),tru原创 2013-11-04 21:43:23 · 485 阅读 · 0 评论 -
求不定方程初始解{ax+by=c,a,b,c∈Z…
var a,b,c,x,y,gcd:longint;function getroot(a,b,c:longint;varx,y,gcd:longint):boolean;var tx,ty:longint;{记得设一个临时存下一层递归的变量}begin if b=0 then if c mod a=0 then begin gcd:=a;原创 2013-11-04 21:44:11 · 1911 阅读 · 0 评论 -
高精度算法{朴素}
TYPE ARR=ARRAY[1..1001] OF INTEGER;VAR K1,K2,I:INTEGER; S1,S2,T:ANSISTRING; A,B,C:ARR;PROCEDURE ADD(A,B:ARR);VAR X,I:INTEGER;BEGIN X:=0; FOR I:=1001 DOWNTO K1 DO BEGIN C[I]:=原创 2013-11-04 21:45:01 · 549 阅读 · 0 评论 -
扩展欧几里得{计算最大公约数的线…
分析见《NOI导刊》第57期var a,b,x,y:longint;function extendedeuclid(a,b:longint; varx,y:longint):longint;var t:longint;begin if b=0 then begin x:=1; y:=0; exit(a); end原创 2013-11-04 21:44:07 · 592 阅读 · 0 评论 -
归并排序{nlogn}
var n,i:longint; a,temp:array[1..100000] oflongint;{不要忘了设temp数组,要不然很悲剧}procedure merge(l,m,r:longint);var i,j,k:longint;begin i:=l; j:=m+1; for k:=l to r do begin if(ir)or(a原创 2013-11-04 21:43:51 · 541 阅读 · 0 评论 -
最短路径
单源最短路径dijkstra算法:procedure dijkstra(s:longint);var i,k,pos,min:longint;begin fillchar(used,sizeof(used),false); for i:=1 to n do d[i]:=w[s,i]; used[s]:=true; d[s]:=0; for K:=1 to原创 2013-11-04 21:43:16 · 558 阅读 · 0 评论 -
最大加权矩形{类似最大子串和}{O(n…
var n,i,j,k,max:longint; a:array[1..100,1..100] of longint; s:array[1..100,0..100] of longint; f:array[1..100] of longint;begin fillchar(s,sizeof(s),0); read(n); for i:=1 to n do fo原创 2013-11-04 21:44:50 · 811 阅读 · 0 评论 -
求N个数的最小公倍数
原文地址:求N个数的最小公倍数作者:zuopp0123原文:http://projecteuler.net/thread=5一道算法题:2520 is the smallest number that can be divided by eachof the numbers from 1 to 10 without any remainder.What is the smallest po转载 2013-11-04 21:44:15 · 808 阅读 · 0 评论 -
快速幂
{if p mod n=r,q mod n=t,then p*q mod n=(r*t) mod n,(p+q)modn=(r+t)mod n}{心血来潮,利用这个可以算自然对数的底}var a,b:longint;function ksm(a,b:longint):int64;begin ksm:=1; while b<>0do begin if ba原创 2013-11-04 21:43:47 · 538 阅读 · 0 评论 -
曼哈顿环{dfs}
var n,i,j,k,x:longint; e:array[1..100] of longint; f:array[1..100,1..100] of boolean; used:array[1..100] of boolean;procedure dfs(s,d:longint);var i:longint;begin if (d=n) and (f[e[d],1原创 2013-11-04 21:44:31 · 774 阅读 · 0 评论 -
逆序对数{nlogn,归排}
var n,i:longint; ans:int64; a,temp:array[1..100000] of longint;procedure merge(l,m,r:longint);var i,j,k:longint;begin i:=l; j:=m+1; for k:=l to r do begin if(ir)or(a[i]原创 2013-11-04 21:43:53 · 722 阅读 · 0 评论 -
并查集
非递归: while x<>father[x] dox:=father[x]; exit(x);递归 if x father[x]:=getfather(x); exit(father[x]);原创 2013-11-04 21:43:03 · 536 阅读 · 0 评论 -
stein算法求最大公约数
var n,a,b,i:longint;function gcd(a,b:longint):longint;begin if a=0 then exit(b); if b=0 then exit(a); if (a and 1=0) and (b and 1=0) thenexit(gcd(a shr 1,b shr 1) shl 1); if (a and 1=0) t原创 2013-11-04 21:44:48 · 841 阅读 · 0 评论 -
差分约束{转}
{http://blog.csdn.net/xuezhongfenfei/article/details/8685313}差分约束系统X1 - X2 X1 - X5X2 - X5X3 - X1 <=5X4 - X1 X4 - X3 X5 - X3 X5 - X4 不等式组(1) 全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以转载 2013-11-04 21:43:41 · 503 阅读 · 0 评论 -
最小生成树
kruskal算法:type edge=record x,y,c:longint; end;var n,i,j,m,ans:longint; e:array[1..10000] of edge; f:array[1..100] of longint;procedure qsort(l,r:longint);var i,j,x,t:longint;begin原创 2013-11-04 21:42:55 · 575 阅读 · 0 评论 -
随机化快速排序
var n,i:longint; a:array[1..100000] of longint;procedure swap(var a,b:longint);var t:longint;begin t:=a;a:=b;b:=t;end;procedure qsort(l,r:longint);var i,j,m:longint;begin i:=l; j:原创 2013-11-04 21:44:55 · 619 阅读 · 0 评论 -
传递闭包
Boolean型数组for k:=1 to n do for i:=1 to n do for j:=1 to ndo f[i,j]:=f[i,j] or (f[i,k] and f[k,j]);{相当好的办法}原创 2013-11-04 21:42:57 · 830 阅读 · 0 评论 -
堆排{nlogn}
var n,i:longint; a:array[1..1000] of longint;procedure buildheap(max,now:longint);var j,x:longint;begin x:=a[now]; j:=now*2; while j begin if(ja[j+1])then inc(j); ifx>原创 2013-11-04 21:44:00 · 712 阅读 · 0 评论 -
拓扑排序
var map:array[1..100,1..100] of boolean; into:array[1..100] of longint; n:longint;procedure init;var i,j:longint;begin fillchar(map,sizeof(map),0); fillchar(into,sizeof(into),0); read原创 2013-11-04 21:43:19 · 520 阅读 · 0 评论 -
排列组合 算法
生成1..n的全排列program fullpermutation;var n:integer; a:array[1..20] of integer; used:array[1..20] of boolean;procedure search(k:integer);var i:integer;begin if k>n then begin for原创 2013-11-04 21:42:46 · 704 阅读 · 0 评论