【CSP-S膜你考】咱們的可可西里

咱們的可可西里

題面

轉眼到了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


$Code$

#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

相關文章
相關標籤/搜索