wikioi如何促进和开展信息学竞赛的辅导工作
wikioi 时间:2021-06-24 阅读:(
)
最大公约数和最小公倍数问题pascal最优
先最小公倍数y0除以最大公约数x0得到一个新数a,
求出把a分解为a=p1*q1=p2*q2=p3*q3=……=pn*qn的形式(其中p1,q1皆为整数,且p1,q1互质p2,q2……等类似)
则对应的p,q为
p=p1*x0=p2*x0=p3*x0=……
q=q1*x0=q2*x0=q3*x0=……优化:
此题只需要知道有多少种不同的方式
所以可以对
a分解质因数
a=m1^a2*m2^a2*m3^a3*……如a=700分解为
a=2^2*5^2*7^1那么p1和p2互质就成为
将这些分解出来的质因数m“给”p1还是p2的问题了(“给”要不都给,要不不给一个,例如700有两个2的质因子,此时要不将2全部分给p1,要一个都不给,因为p1,p2需要互质,如果一个p1,p2一人一个2,则必不互质)
对于一个质因数m[i],只有两种选择,给p1,给p2,而定下m[i]后,m[i+1]后就有两种选择,所以如果a有n个不同的质因数,则用答案是2^n.
所以只要判断a有多少不同的质因数。
所以……
代码等下给,我先喝口水来,你先理解理解。
wikioi 1078 最小生成树 pascal 标程及解释 不加优化
program ;
var
i,j,m,n,ans,k:longint;
d:array [1..300] of longint;
a:array [1..300,1..300] of longint;
begin
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
read(a[i,j]);
readln;
end;
for i:=1 to n do d[i]:=a[1,i];
for i:=1 to n-1 do
begin
m:=maxlongint;
for j:=1 to n do
if (d[j]<>0)and(d[j]<m) then begin m:=d[j];k:=j; end;
inc(ans,d[k]);d[k]:=0;
for j:=1 to n do
if a[k,j]<d[j] then d[j]:=a[k,j];
end;
write(ans);
end.
经典的prim算法,望采纳
这个测试数据绝对能过,这个程序我已经测过了关于PascalDelphi中read buffer的使用方法
ReadBuffer这个函数在实现了输入输出流也就是序列化操作的很多类里面都有,有很多种重载的版本,但是其基本含义如下:
从一个指定的buffer中读取最多n个数据,如果buffer中数据大小m不够n则只读取m个,如果大于n则读取n个。
pascal线段覆盖(http://www.wikioi.com/problem/1214/)大神们来帮帮忙吧,求标程……
动态转移方程:f[i]=max(f[k]+1)
min:=maxlongint;max:=-maxlongint;
for i:=1 to n do
begin
readln(x,y);
if x>y then begin t:=x;x:=y;y:=t;end;
f[x,y]:=true;
if y>max then max:=y;
if x<min then min:=x;
end;
for i:=min to max do f1[i]:=0;
for i:=min to max do
begin
for j:=min to i do
begin
if f1[j]>f1[i] then f1[i]:=f1[j];
if (f[j,i]=true)and(f1[j]+1>f1[i]) then f1[i]:=f1[j]+1;
end;
end;
writeln(f1[max]);1204 寻找子串位置 c语言代码问题
#include?"stdio.h" #include?<string.h> ?void?find(char?a[],char?b[]) ?{ ????int?len1,len2,i=0,j=0; ????char?*str1,*str2; ????str1=a;str2=b; ????len1=strlen(str1); ????len2=strlen(str2); ????while(i<len1&&j<len2) ????{ ????????if(str1[i]==str2[j]) ????????{ ????????????i++;j++; ????????} ????????else ????????{ ????????i=i-j+1;j=0; ????????} ????} ????if(j>=len2)?printf(?"%d
",(i-j+1)); ????else?printf("no?found"); } ?void?main() ?{ ????char?a[100],b[100]; ????int?i=0; ????char?c; ????while((c=getchar())!='?') ????{ ????????a[i++]=c; ????} ????a[i]='