转眼到了2008年的6月9日,盼望已久的高考结束了。咱们踏上了向西的旅程(原本是想写西去之路,但是考虑不太稳当)。可可西里,多么诱人的名词,充满了奇幻的色彩和天然的淳朴。从可可西里徒步走回家的决定是在1年半前定下的,而如今,终于能够实现那个钩过手指的预约。咱们的可可西里。。。html
在回家的路上,疯子和蚊子看到了许多可爱的藏羚羊,无心之中疯子和蚊子发现藏羚羊的居住地的分布也是有规律的,虽然疯子和蚊子早就据说藏羚羊是一种群体性很强又有超高IQ的动物,可是仍是为它们的居住地分布规律感到惊叹。通过细心的观察,疯子和蚊子发现,若是假设一个藏羚羊群体有N只羊,就能够把它们的领地当作一个N*N的方阵,在这个方阵上第I列的第I 行都有一个圣地,它们不会居住在圣地,同时每行每列只能居住一只羚羊。因而他们很快算出一个有N只羊的藏羚羊群体的居住地分布方法数。ios
这是圣地的一种排列方法code
一个整数N 表明藏羚羊的个数htm
一个整数sum表明方法数blog
$\texttt{input#1}$
4ci
$\texttt{output#1}$
9get
对于30%的数据,n<=10
对于所有数据 n<=1000input
错排。高精度(毒瘤)。string
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<algorithm> int n; std::string f[1001]={"0","0","1","2"}; inline std::string jia(std::string a,std::string b) { std::string ans="",cheng1="",cheng2=""; int len=a.length(); for(int i=len-1;i>=0;--i) cheng1+=a[i]; len=b.length(); for(int i=len-1;i>=0;--i) cheng2+=b[i]; int len1=cheng1.length(),len2=cheng2.length(); int sum=0; char jinwei=0,c1,c2; while(sum<len1||sum<len2) { c1=cheng1[sum]-48; c2=cheng2[sum]-48; if(c1<0) c1=0; if(c2<0) c2=0; if(sum>=len1) c1=0; if(sum>=len2) c2=0; c1+=c2; c1+=jinwei; jinwei=0; if(c1>9) { jinwei=c1/10; c1=c1%10; } ans+=c1+'0'; sum++; } while(jinwei!=0) { char qwq=jinwei/10; jinwei=jinwei%10; ans+=jinwei+'0'; jinwei=qwq; } std::string anss=""; len=ans.length(); for(int i=len-1;i>=0;--i) anss+=ans[i]; return anss; } inline std::string cheng(int n,std::string a) { std::string ans="",cheng1="",cheng2=""; while(n) { cheng1+=n%10+'0'; n/=10; } int len=a.length(); for(int i=len-1;i>=0;--i) cheng2+=a[i]; int len1=cheng1.length(),len2=cheng2.length(); std::string qwq="0",qaq="",emm=""; char jinwei=0; for(int i=0;i<len1;++i) { qaq="",emm=""; int x=i; while(x) { --x; qaq+='0'; } for(int j=0;j<len2;++j) { char c2=cheng2[j]-'0',c1=cheng1[i]-'0'; c1*=c2; c1+=jinwei; jinwei=0; if(c1>9) { jinwei=c1/10; c1%=10; } qaq+=c1+'0'; } while(jinwei!=0) { char wasd=jinwei/10; jinwei%=10; qaq+=jinwei+'0'; jinwei=wasd; } int len=qaq.length(); for(int j=len-1;j>=0;--j) emm+=qaq[j]; qwq=jia(qwq,emm); } return qwq; } inline std::string jiaqwq(std::string qaq) { int len=qaq.length(); std::string ans="",qwq=""; char jinwei=1; for(int i=len-1;i>=0;--i) { qaq[i]-='0'; qaq[i]+=jinwei; jinwei=0; ans+=qaq[i]%10+'0'; if(qaq[i]>9) jinwei=qaq[i]/10; } len=ans.length(); for(int i=len-1;i>=0;--i) qwq+=ans[i]; return qwq; } int main() { std::cin>>n; for(int i=4;i<=n;++i) { std::string qwq=jia(f[i-1],f[i-2]); f[i]=cheng(i-1,qwq); } std::cout<<f[n]; return 0; }
上接【CSP-S膜你考】那23个路口it