讨论 / 题目没理解
Ai 2008-11-08 01:49:00
点我顶贴 收藏 删除
我以为是 stirling(m,n)*n!

结果不经wa而且aw(all wrong)了

#1 Ai@2008-11-07 06:55:00
回复 删除
这道题应该是什么意思啊
#2 cth@2008-11-07 07:07:00
回复 删除
我也认为是S(m,n)*n!
#3 飞雪天涯@2008-11-07 08:08:00
回复 删除
Stirling(n-1,m)*(n-1)!
#4 SGi@2008-11-07 08:16:00
回复 删除
结果就是第二类Stiring数,但是那人自己是不拿雪糕的所以就是S(n,k-1)*(k-1)!

用P写的高精度,格式不好仅供参考。。

type

bignum = array [1..50] of longint;

var

d : array[1..100,1..100] of bignum;

i,n,k,p,flag : longint;

ans : bignum;

st,res : string;

operator + (a,b : bignum) c:bignum;

var

i : longint;

begin

for i := 1 to 50 do

c[i] := a[i] + b[i];

for i := 1 to 50 do begin

c[i+1] := c[i+1] + c[i] div 10000;

c[i] := c[i] mod 10000;

end;

end;

operator * (x : longint; a : bignum) c : bignum;

var

i : longint;

begin

for i := 1 to 50 do

c[i] := a[i] * x;

for i := 1 to 50 do begin

c[i+1] := c[i+1] + c[i] div 10000;

c[i] := c[i] mod 10000;

end;

end;

function s(n,k : longint):bignum;

begin

if d[n,k][1] > 0 then exit(d[n,k]);

d[n-1,k] := s(n-1,k);

d[n-1,k-1] := s(n-1,k-1);

s := k*d[n-1,k] + d[n-1,k-1];

end;

begin

readln(k,n);

for i := 1 to n do begin

d[i,i][1] := 1;

d[i,1][1] := 1;

end;

ans := s(n,k-1);

for i := 2 to k-1 do ans := i * ans;

for i := 50 downto 1 do begin

str(ans[i],st);

while length(st) < 4 do st := ’0’ + st;

res := res + st;

end;

while res[1] = ’0’ do delete(res,1,1);

writeln(res);

end.

#5 ricky_5@2008-11-08 01:49:00
回复 删除
type num=array[0..500] of longint;

var n,k,i,j:longint;

f,g:array[1..100] of num;

jc:array[0..100] of num;

ans:num;

function mul(x:num;kk:longint):num;

var ii,ll:longint;

begin

if (kk=0) or (x[0]=0) then begin

fillchar(x,sizeof(x),0);

mul:=x; exit;

end;

ll:=trunc(ln(kk)/ln(10))+1;

for ii:=1 to x[0] do

x[ii]:=x[ii]*kk;

for ii:=1 to x[0]+ll do begin

x[ii+1]:=x[ii+1]+x[ii] div 10;

x[ii]:=x[ii] mod 10;

end;

if x[x[0]+ll]=0 then x[0]:=x[0]+ll-1 else x[0]:=x[0]+ll;

mul:=x;

end;

function add(x1,x2:num):num;

var ii:longint;

begin

if x2[0]>x1[0] then x1[0]:=x2[0];

for ii:=1 to x1[0] do x1[ii]:=x1[ii]+x2[ii];

for ii:=1 to x1[0] do begin

x1[ii+1]:=x1[ii+1]+x1[ii] div 10;

x1[ii]:=x1[ii] mod 10;

end;

if x1[x1[0]+1]>0 then x1[0]:=x1[0]+1;

add:=x1;

end;

function mm(x1,x2:num):num;

var ii,jj:longint;

c:num;

begin

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

for ii:=1 to x1[0] do

for jj:=1 to x2[0] do

c[ii+jj-1]:=c[ii+jj-1]+x1[ii]*x2[jj];

for ii:=1 to x1[0]+x2[0]-1 do begin

c[ii+1]:=c[ii+1]+c[ii] div 10;

c[ii]:=c[ii] mod 10;

end;

if c[x1[0]+x2[0]]>0 then c[0]:=x1[0]+x2[0] else c[0]:=x1[0]+x2[0]-1;

mm:=c;

end;

begin

read(k,n); k:=k-1;

if k>n then begin writeln(0); exit; end;

for i:=1 to n do begin

f[1][1]:=1; f[1][0]:=1; end;

for i:=2 to n do begin

g[1][1]:=1; g[1][0]:=1;

for j:=2 to k do

g[j]:=add(mul(f[j],j),f[j-1]);

f:=g;

end;

jc[1][0]:=1; jc[1][1]:=1; jc[0]:=jc[1];

for i:=2 to 100 do

jc[i]:=mul(jc[i-1],i);

ans:=mm(f[k],jc[k]);

for i:=ans[0] downto 1 do write(ans[i]);

writeln;

end.

n,k是倒着输入的,也就是n k

样例给了个3 3 太放屁了!

(囧)弄倒了居然有40分

PS:LS的高精度写得很奇特

查看更多回复
提交回复