Run ID | User | Problem | Result | Memory | Time | Language | Code Length | Submit Time |
3948135 | slxg | 2084 | Accepted | 1324K | 32MS | Pascal | 1366B | 2008-08-22 15:26:22 |
直接推出公式:
f [n]=sigma(f[n-1-i]*f[i]) (0<=i<=n-1)
據說是 catalan 數
然後就好了~
注意要用高精度~
然後編了一個 挺漂亮 的 運算符重載:
- operator *(a,b:arr) c:arr;
- var
- i,j:integer;
- begin
- fillchar(c,sizeof(c),0);
- c[-1]:=a[-1]+b[-1]-1;
- for i:=0 to a[-1] do begin
- for j:=0 to b[-1] do c[i+j]:=c[i+j]+a[i]*b[j];
- for j:=0 to c[-1] do begin
- inc(c[j+1],c[j] div 10000);
- c[j]:=c[j] mod 10000;
- end;
- end;
- if c[c[-1]+1]<>0 then inc(c[-1]);
- end;
- operator + (a,b:arr) c:arr;
- var
- i:integer;
- j:longint;
- begin
- fillchar(c,sizeof(c),0);
- if a[-1]>b[-1] then c[-1]:=a[-1] else c[-1]:=b[-1];
- j:=0;
- for i:=0 to c[-1] do begin
- j:=j+a[i]+b[i];
- c[i]:=j mod 10000;
- j:=j div 10000;
- end;
- if j<>0 then begin
- inc(c[-1]);
- c[c[-1]]:=j;
- end;
- end;