题解 P2532 【[AHOI2012]树屋阶梯】
此题就是一个卡兰特数列,用个高精就行 = = // luogu-judger-enable-o2
include<bits/stdc++.h>
define me(a) memset(a,0,sizeof(a))
//#pragma GCC optimize(0)//o0优化
//#pragma GCC optimize(2)//o2优化
//#pragma GCC optimize(3)//o3优化
using namespace std;
string h[501];
string cheng(string x,int y)
{
string ans="";
int a[299];
me(a);
int a1,b1,k,r=0;
a1=x.size();
for(int i=0;i<a1;i++)
{
a[i]=x[a1-i-1]-'0';
}
for(int i=0;i<a1;i++)
{
a[i]*=y;
}
for(int i=0;i<a1;i++)
{
if(a[i]>9)
{
a[i+1]+=a[i]/10;
a[i]%=10;
if(i==a1-1)
{
a1++;
}
}
}
for(int i=a1-1;i>=0;i--)
{
ans+=char(a[i]+48);
}
return ans;
}
string chu(string n,int y)
{
int a[299];
// me(a);
string ans="";
int x,yu=0;
x=n.size();
for(int i=0;i<x;++i)
{
a[i]=(yu*10+(n[i]-'0'))/y;
yu=(yu*10+(n[i]-'0'))%y;
}
int k=0;
while(a[k]==0&&k<x)
{
k++;
}
for(int i=k;i<x;++i)
{
ans+=char(a[i]+48);
}
return ans;
}
int main()
{
//freopen("ask.in","r",stdin);
//freopen("ask.out","w",stdout);
int n;
cin>>n;
h[0]="1";
for(int i=1;i<=n;++i)
{
h[i]=chu(cheng(h[i-1],(4*i-2)),i+1);
}
cout<<h[n];
return 0;
}
//另,附上O(1)算法(逃:(由于字数限制,只好牺牲小号,来浪一波= =) O(1)算法