wills经典算法.docx
- 文档编号:3310775
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:45
- 大小:733.68KB
wills经典算法.docx
《wills经典算法.docx》由会员分享,可在线阅读,更多相关《wills经典算法.docx(45页珍藏版)》请在冰豆网上搜索。
wills经典算法
奥赛是一种心态,奥赛是一份拼搏,奥赛是一种努力。
成功了我不会骄傲,失败了我不会气馁,但我会努力,竭尽所能。
不管最后的结果怎样,在loi的日子,是我今生的财富。
我相信,在奥赛的得失之中,我不会失败!
最后,祝愿所有的loier。
loi勇于拼搏,开拓进取,前途无量!
RP++
{这里收集了一些经典算法}
{By:
WillWang.Fornoip2010}
{神马都是浮云(⊙o⊙)啊!
}
{RP++}
//######################我不是分隔线#########################
//1.数论
var
i,j,k,n,m:
longint;
p:
array[1..50000]ofboolean;
//最大公约数
functiongcd(a,b:
longint):
longint;
begin
ifb=0thenexit(a)elseexit(gcd(b,amodb));
end;//gcd
//最小公倍数
functionlcm(a,b:
longint):
longint;
begin
exit(adivgcd(a,b)*b);
end;//lcm
//小范围内判断一个数是不是质数
functionprime(z:
longint):
boolean;
begin
fori:
=2totrunc(sqrt(z))do
ifzmodi=0thenexit(false);
exit(true);
end;//prime
//用筛法求素数
proceduregetprime;
begin
fillchar(p,sizeof(p),true);
p[1]:
=false;
i:
=2;
whilei<50000dobegin
j:
=ishl1;
whilej<50000do
begin
p[j]:
=false;
inc(j,i);
end;
inc(i);
end;
fori:
=1to10doifp[i]thenwriteln(i);
end;//getprime
functionsuperprime(z:
longint):
boolean;
begin
ifp[z]thenexit(true)elseexit(false);
end;//superprime
//main
begin
readln(n,m);
writeln(gcd(n,m));
writeln(lcm(n,m));
writeln(prime(n));
getprime;
writeln(superprime(n));
end.
//######################我不是分隔线#########################
//最小生成树--huffman
programhuffmantree;
constmaxn=100;m=2*100-1;
type
node=record
data:
longint;
prt,lch,rch:
longint;
end;
ty=array[1..m]ofnode;
var
i,j,k,n:
longint;
tree:
ty;
procedurehuffman(vartree:
ty);
functionmin(h:
longint):
longint;
var
m1,p,i:
longint;
begin
m1:
=maxlongint;
forp:
=1tohdo
if(tree[p].prt=0)and(m1>tree[p].data)thenbegin
i:
=p;
m1:
=tree[p].data;
end;
min:
=i;
end;//min
begin
fork:
=n+1to2*n-1do
begin
i:
=min(k-1);tree[i].prt:
=k;tree[k].lch:
=i;
j:
=min(k-1);tree[j].prt:
=k;tree[k].rch:
=j;
tree[k].data:
=tree[i].data+tree[j].data;
end;
end;//huffman
//main
begin
fillchar(tree,sizeof(tree),0);
readln(n);
fori:
=1tondoread(tree[i].data);
huffman(tree);
fori:
=1to2*n-1dowriteln(tree[i].data);
end.
//######################我不是分隔线#########################
//最小生成树-----prim算法
programprimtree;
constmaxn=1000;
var
map:
array[1..maxn,1..maxn]oflongint;
cost:
array[1..maxn]oflongint;
visit:
array[1..maxn]ofboolean;
i,j,n,m,x,y,v:
longint;
functionprim:
longint;
vari,j,min,mini,ans:
longint;
begin
ans:
=0;
fori:
=1tondobegin
visit[i]:
=false;
cost[i]:
=maxlongint;
end;
fori:
=2tondo
ifmap[1,i]<>0thencost[i]:
=map[1,i];
visit[1]:
=true;
fori:
=1ton-1do
begin
min:
=maxlongint;
forj:
=1tondo
ifnot(visit[j])and(cost[j] min: =cost[j]; mini: =j; end; visit[mini]: =true; inc(ans,min); forj: =1tondo ifnotvisit[j]and(map[mini,j]>0)and(map[mini,j] thencost[j]: =map[mini,j]; end; exit(ans); end;//prim //main begin fillchar(map,sizeof(map),0); readln(n,m); fori: =1tomdo begin readln(x,y,v); if(map[x,y]=0)or(map[x,y]>v)then begin map[x,y]: =v;map[y,x]: =v; end; end; writeln(prim); end. //最小生成树--------kruskal算法 programkruskal; const maxn=1000; type rqmap=record s,t,v: longint; end; var map: array[1..maxn*maxn]ofrqmap; father: array[1..maxn]oflongint; n,m,i,ingraph,ans: longint; procedureqsort(l,r: longint); vari,j,x: longint;t: rqmap; begin i: =l;j: =r; x: =map[(i+j)shr1].v; repeat whilemap[i].v whilemap[j].v>xdodec(j); ifi<=jthen begin t: =map[i]; map[i]: =map[j]; map[j]: =t; inc(i); dec(j); end; untili>j; ifl ifr>ithenqsort(i,r); end;//qsort functionfind(x: longint): longint; begin iffather[x]=xthenexit(x); father[x]: =find(father[x]); exit(father[x]); end;//find procedureunion(a,b: longint); begin father[find(a)]: =find(father[b]); end;//union //main begin readln(n,m); fori: =1tondofather[i]: =i; fori: =1tomdowithmap[i]doreadln(s,t,v); qsort(1,m); ans: =0; ingraph: =1; i: =0; whileingraph begin inc(i); iffind(map[i].s)<>find(map[i].t)then begin inc(ingraph); inc(ans,map[i].v); union(map[i].s,map[i].t); end; end; writeln(ans); end.} {最小生成树例题数据: 610 126 131 145 235 253 536 566 634 642 435 ans=15} //######################我不是分隔线######################### //带权图的最短路---dijkstra算法 programdijkstrashort; constmaxn=5; var cost: array[1..maxn,1..maxn]oflongint; a: array[1..maxn]oflongint; n,k,i,j: longint; mark: array[1..maxn]ofboolean; procedurereaddata; begin readln(n,k); fori: =1tondo forj: =1tondo read(cost[i,j]); end;//readdate proceduredijkstra; vari,j,min,minj,temp: longint; begin fillchar(mark,sizeof(mark),false); fori: =1tondoa[i]: =maxlongint; a[k]: =0; fori: =1ton-1do begin min: =maxlongint; forj: =1tondo ifnot(mark[j])and(a[j] begin min: =a[j]; minj: =j; end; mark[minj]: =true; forj: =1tondo ifnot(mark[j])and(cost[minj,j]>0)then begin temp: =a[minj]+cost[minj,j];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- wills 经典 算法