• 【CSP-S膜你考】我们的可可西里


    我们的可可西里

    题面

    转眼到了2008年的6月9日,盼望已久的高考结束了。我们踏上了向西的旅程(本来是想写西去之路,可是考虑不太妥当)。可可西里,多么诱人的名词,充满了奇幻的色彩和自然的淳朴。从可可西里徒步走回家的决定是在1年半前定下的,而现在,终于可以实现那个钩过手指的预定。我们的可可西里。。。

    在回家的路上,疯子和蚊子看到了许多可爱的藏羚羊,无意之中疯子和蚊子发现藏羚羊的居住地的分布也是有规律的,虽然疯子和蚊子早就听说藏羚羊是一种群体性很强又有超高IQ的动物,但是还是为它们的居住地分布规律感到惊叹。经过细心的观察,疯子和蚊子发现,如果假设一个藏羚羊群体有N只羊,就可以把它们的领地当做一个N*N的方阵,在这个方阵上第I列的第I 行都有一个圣地,它们不会居住在圣地,同时每行每列只能居住一只羚羊。于是他们很快算出一个有N只羊的藏羚羊群体的居住地分布方法数。

    这是圣地的一种排列方法

    输入格式

    一个整数N 代表藏羚羊的个数

    输出格式

    一个整数sum代表方法数

    样例

    ( exttt{input#1})
    4

    ( exttt{output#1})
    9

    数据范围与提示

    对于30%的数据,n<=10
    对于全部数据 n<=1000


    题解

    错排。高精度(毒瘤)。


    (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个路口

  • 相关阅读:
    [恢]hdu 2502
    [恢]hdu 1008
    [恢]hdu 2073
    [恢]hdu 2500
    [恢]hdu 2501
    [恢]hdu 2190
    [恢]hdu 2535
    [恢]hdu 2085
    [恢]hdu 2067
    [恢]hdu 2504
  • 原文地址:https://www.cnblogs.com/poi-bolg-poi/p/11713442.html
Copyright © 2020-2023  润新知