zoukankan      html  css  js  c++  java
  • bzoj 前100题计划

    bzoj前100题计划

    xz布置的巨大的坑。。

    有空填题解。。。


    1002 轮状病毒

    用python手动matrixtree打表。

    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    typedef long long ll;
    il int gi(){
        int x=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*f;
    }
    char biao[101][45]={"mmp","1","5","16","45","121","320","841","2205","5776","15125","39601","103680","271441","710645","1860496","4870845","12752041","33385280","87403801","228826125","599074576","1568397605","4106118241","10749957120","28143753121","73681302245","192900153616","505019158605","1322157322201","3461452808000","9062201101801","23725150497405","62113250390416","162614600673845","425730551631121","1114577054219520","2918000611027441","7639424778862805","20000273725560976","52361396397820125","137083915467899401","358890350005878080","939587134549734841","2459871053643326445","6440026026380244496","16860207025497407045","44140595050111976641","115561578124838522880","302544139324403592001","792070839848372253125","2073668380220713167376","5428934300813767249005","14213134522220588579641","37210469265847998489920","97418273275323406890121","255044350560122222180445","667714778405043259651216","1748099984655007556773205","4576585175559979410668401","11981655542024930675232000","31368381450514812615027601","82123488809519507169850805","215002084978043708894524816","562882766124611619513723645","1473646213395791149646646121","3858055874062761829426214720","10100521408792494338631998041","26443508352314721186469779405","69230003648151669220777340176","181246502592140286475862241125","474509504128269190206809383201","1242282009792667284144565908480","3252336525249732662226888342241","8514727565956530702536099118245","22291846172619859445381409012496","58360810951903047633608127919245","152790586683089283455442974745241","400010949097364802732720796316480","1047242260609005124742719414204201","2741715832729650571495437446296125","7177905237579946589743592924684176","18791999880010189197735341327756405","49198094402450621003462431058585041","128802283327341673812651951847998720","337208755579574400434493424485411121","882823983411381527490828321608234645","2311263194654570182037991540339292816","6050965600552329018623146299409643805","15841633607002416873831447357889638601","41473935220454921602871195774259272000","108580172054362347934782139964888177401","284266580942632122201475224120405260205","744219570773534018669643532396327603216","1948392131377969933807455373068577549445","5100956823360375782752722586809405045121","13354478338703157414450712387359637585920","34962478192749096460599414575269507712641","91532956239544131967347531338448885552005","239636390525883299441443179440077148943376","627376215338105766356982006981782561278125",};
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("1002.in","r",stdin);
        freopen("1002.out","w",stdout);
    #endif
        printf("%s",biao[gi()]);
        return 0;
    }
    
    from decimal import Decimal,getcontext
    getcontext().prec=80
    eps=Decimal("0."+"0"*50+"1")
    for n in range(3,101):
        A=[[Decimal('0') for i in range(0,n)]for i in range(0,n)]
        for i in range(0,n):A[i][i]=Decimal('3')
        for i in range(0,n):
            for j in range(0,n):
                if i!=j:A[i][j]=Decimal(str(-int(abs(i-j)==1 or abs(i-j)==n-1)))
        for i in range(0,n):
            for j in range(i+1,n):
                if(abs(A[j][i])>abs(A[i][i])):
                    A[i],A[j]=A[j],A[i]
            for j in range(i+1,n):
                if abs(A[j][i]-Decimal('0'))<eps:continue
                S=A[j][i]/A[i][i]
                for k in range(i,n):
                    A[j][k]-=A[i][k]*S
        ans=Decimal('1')
        for i in range(0,n):ans*=A[i][i]
        print("""+str(int(ans))+""",end=',')
    

    Decimal高精度真tm好


    1004 cards

    神仙Burnside。玄学求出所有洗牌法都没有不动点(除了单位元)

    所以答案是不动点个数/(m+1),不动点个数是把Srgb组合一下


    1005 明明的烦恼

    怎么全是高精好烦啊

    就是prufer序列上面d[i]!=-1的点会出现d[i]-1次,设前cnt个点d[i]!=-1,(sum=sum_{i=1}^{cnt}d[i]-1)

    所以这部分是(frac{sum!}{Pi_{i=1}^{cnt} (d[i]-1)!})

    剩下的点一共有(n-cnt)个,出现(n-2-sum)次,所以这部分是((n-cnt)^{n-2-sum})

    然后还要乘一个(C_{n-2}^{sum})

    所以最后答案就是(C_{n-2}^{sum} imes frac{sum!}{Pi_{i=1}^{cnt} (d[i]-1)!} imes (n-cnt)^{n-2-sum})

    还能约个分$ frac{(n-2)!(n-cnt)^{n-2-sum}}{(n-2-sum)!Pi_{i=1}^{cnt} (d[i]-1)!}$

    这个诡异的东西,高精求就行了。。。


    1037 [ZJOI2008]生日聚会Party

    f[i][j][k][l] 表示选i个♂的j个♀的,右边每一段最多男比女多k女比男多l的方案数


    1038 瞭望塔

    每条直线的上半平面求个交。答案一定在原来折线的交点或上凸壳的顶点上。

    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    typedef long long ll;
    il int gi(){
        int x=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*f;
    }
    double x[301],y[301];
    struct line{double k,b;bool del;}l[301],s[301],b[301];
    int n,top;
    il bool operator <(const line&a,const line&b){
        if(a.del)return 0;if(b.del)return 1;
        if(fabs(a.k-b.k)>1e-9)return a.k<b.k;
        return a.b>b.b;
    }
    il double jx(const line&a,const line&b){return(a.b-b.b)/(b.k-a.k);}
    il double jy(const line&a,const line&b){return(a.k*b.b-a.b*b.k)/(a.k-b.k);}
    il double solve(double X,line*s,int N){
        for(int i=1;i<N;++i)if(X-1e-9<=jx(s[i],s[i+1]))return s[i].k*X+s[i].b;
        return s[N].k*X+s[N].b;
    }
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("1038.in","r",stdin);
        freopen("1038.out","w",stdout);
    #endif
        n=gi();
        for(int i=1;i<=n;++i)scanf("%lf",&x[i]);
        for(int i=1;i<=n;++i)scanf("%lf",&y[i]);
        int m=n-1;
        for(int i=1;i<=m;++i){
            l[i].k=b[i].k=(y[i]-y[i+1])/(x[i]-x[i+1]);
            l[i].b=b[i].b=y[i]-l[i].k*x[i];
            l[i].del=0;
        }
        std::sort(l+1,l+m+1);
        for(int i=1;i<=m;++i)if(fabs(l[i].k-l[i-1].k)<1e-7)l[i].del=1;
        std::sort(l+1,l+m+1);
        l[m+1].del=1;m=0;while(!l[m+1].del)++m;
        top=0;
        s[++top]=l[1];
        for(int i=2;i<=m;++i){
            while(top>1&&jx(s[top],l[i])<=jx(s[top-1],l[i])-1e-9)--top;
            s[++top]=l[i];
        }
        double ans=1e18;
        ans=std::min(ans,solve(x[1],s,top)-solve(x[1],b,n-1));
        ans=std::min(ans,solve(x[n],s,top)-solve(x[n],b,n-1));
        for(int i=1;i<n;++i){
            double p=jx(b[i],b[i+1]);
            ans=std::min(ans,solve(p,s,top)-solve(p,b,n-1));
        }
        for(int i=1;i<top;++i){
            double p=jx(s[i],s[i+1]);
            if(p+1e-9>=x[1]&&p<=x[n]+1e-9)ans=std::min(ans,solve(p,s,top)-solve(p,b,n-1));
        }
        if(ans<0)ans=0;
        printf("%.3lf
    ",ans);
        return 0;
    }
    

  • 相关阅读:
    pytorch实现BiLSTM+CRF用于NER(命名实体识别)
    pytorch中如何处理RNN输入变长序列padding
    pytorch nn.LSTM()参数详解
    Pytorch的LSTM的理解
    转:pytorch版的bilstm+crf实现sequence label
    【Tensorflow】tf.nn.atrous_conv2d如何实现空洞卷积?膨胀卷积
    iOS iphone5屏幕适配 autosizing
    IOS文件存储小结
    IIS6_IIS7日志文件位置
    xcode中没有autoSizing的设置
  • 原文地址:https://www.cnblogs.com/xzz_233/p/9651252.html
Copyright © 2011-2022 走看看