讨论 / 帮个忙
~小耳朵猪~ 2012-07-16 05:56:00
点我顶贴 收藏 删除
noip 2011计算系数

program star;

var a,b,k,n,m:longint;

function mi(q1,q2:longint):int64;

begin

if q1=1 then exit(1);

if q2=0 then mi:=1

else mi:=q1*mi(q1,q2-1);

end;

function jiecheng(e:longint):int64;

begin

if e=0 then exit(1);

if e=1 then jiecheng:=1

else jiecheng:=e*jiecheng(e-1);

end;

function c(w1,w2:longint):int64;

begin

if w1=w2 then exit(1);

c:=jiecheng(w1) div (jiecheng(w2)*jiecheng(w1-w2));

end;

begin

assign(input,'star.in');assign(output,'star.out');

reset(input);rewrite(output);

readln(a,b,k,n,m);

writeln(mi(a,k-m)*mi(b,m)*c(k,m));

close(input);close(output);

end.

#1 b249265450@2012-07-15 18:21:00
回复 删除
楼主的程序我不太看得懂,我是用二项式定理做的。

var

i,j,k,m,n:longint;

a1,b1,a,b,c:int64;

s:array[0..1000,0..1000] of longint;

begin

readln(a,b,k,n,m);

fillchar(s,sizeof(s),0);

s[1,1]:=1;s[1,2]:=1;

for i:=2 to k do

for j:=1 to i+1 do

begin

s[i,j]:=s[i-1,j-1]+s[i-1,j];

s[i,j]:=s[i,j] mod 10007;

end;

c:=s[k,n+1];

{for i:=1 to k do

begin

for j:=1 to i+1 do

write(s[i,j],' ');

writeln;

end;}

a1:=1;b1:=1;

if a>1 then

begin

a1:=a;

for i:=1 to n-1 do

a1:=(a1*a) mod 10007;

end;

if b>1 then

begin

b1:=b;

for i:=1 to m-1 do

b1:=(b1*b) mod 10007;

end;

c:=(a1*c) mod 10007;

c:=(b1*c) mod 10007;

writeln(c);

end.

#2 ~小耳朵猪~@2012-07-16 04:22:00
回复 删除
回复 沙发b249265450 的帖子

我的也是二项式定理啊、就是我写代码有点随意。。。我给你稍微解释一下,麻烦忙我看看是在哪里有错误。谢了啊、mi函数mi(i,j)表示i的j次幂。jiecheng(i)是i的阶乘。

然后二项式定理(ax+by)^k整理得(a^k-r)*(b^r) *C(k,r)*X^(k-r)*Y^(r) (不知道你能不能看懂。。)所以就这样一带不久行了嘛。麻烦给看看啊。谢谢感激不尽!!!

#3 ~小耳朵猪~@2012-07-16 05:56:00
回复 删除
救救我吧!!!

我又改进了一下,还是不对,帮给看下啊

program star;

var a,b,k,n,m,i,j:longint;

c:array[-5..5000,1-5..5000]of int64;

function mi(q1,q2:longint):int64;

begin

if q1=1 then exit(1);

if q2=0 then mi:=1

else mi:=q1*mi(q1,q2-1);

end;

begin

assign(input,'star.in');assign(output,'star.out');

reset(input);rewrite(output);

readln(a,b,k,n,m);

fillchar(c,sizeof(c),0);

c[1,1]:=1;c[1,2]:=1;

for i:=2 to k do

for j:=1 to i+1 do

c[i,j]:=c[i-1,j]+c[i-1,j-1];

writeln((mi(a,k-m)*mi(b,m)*c[k,m+1])mod 10007);

close(input);close(output);

end.

查看更多回复
提交回复