zoukankan      html  css  js  c++  java
  • Luogu P3223 [HNOI2012]排队 组合

    本来做了一道  P4901 排队 后来发现自己做错题了。。。到也都是数学qwq


    这题最恶心的就是两只(雾)老师。

    那我们分类讨论:

    1.两个老师之间是男生:

      $ A(n,n)*A(n+1,2)*A(n+3,m) $

    首先男生有$ A(n,n)=n! $种排列方式;然后有$ n+1$ 个空隙(加上开头和结尾)可以放老师,所以老师是$ A(n+1,2)=(n+1)!/(n+1-2)!=(n+1)*n$;然后有$ n+3$ 个空隙(加上开头和结尾)可以放女生,所以女生是$ A(n+3,m)=frac{(n+3)!}{(n+3-m)!}$

    2.两个老师之间是女生(相当于捆绑):
      $A(n,n)*A(2,2)*m*A(n+1,1)*A(n+2,m-1)$

    首先男生有$ A(n,n)=n! $种排列方式;老师按先后分有$A(2,2)=2$种排列;然后女生中任取$1$个有$m$种;然后有$ n+1$ 个空隙(加上开头和结尾)可以放 老师+女生+老师(捆绑),所以 老师+女生+老师一个整体的位置 是$ A(n+1,1)=(n+1)!$;然后有$ n+2$ 个空隙(加上开头和结尾,并且 老师+女生+老师 看作一个整体)可以放$m-1$女生,所以女生是$ A(n+2,m-1)=frac{(n+2)!}{(n+3-m)!}$

    所以原式:$A(n,n)*A(n+1,2)*A(n+3,m)+A(n,n)*A(2,2)*m*A(n+1,1)*A(n+2,m-1)$

    化简可得:$frac{(n+1)!*(n+2)*(n^2+3*n+2*m)}{(n+3-m)!}$

    然后自己死在了scanf上:少写了一个%d...fk

    #include<cstdio>
    #include<iostream>
    #define R register int
    using namespace std;
    const long long B=10000000000ll;
    int n,m,sz=1;
    long long ans[10000];
    inline void mul(int x) { R tmp=0;
        for(R i=1;i<=sz;++i) ans[i]*=x,ans[i]+=tmp,tmp=ans[i]/B,ans[i]%=B;
        if(tmp) ++sz,ans[sz]=tmp;
    }
    signed main() { 
        scanf("%d%d",&n,&m); ans[1]=1; 
        for(R i=1;i<=n+1;++i) mul(i); mul(n*(n+3)+2*m);
        for(R i=n-m+4;i<=n+2;++i) mul(i); //cout<<sz<<endl;
        printf("%lld",ans[sz]); for(R i=sz-1;i;--i) printf("%010lld",ans[i]); putchar('
    ');
    } 

    2019.05.17

  • 相关阅读:
    idea本地安装 lombok插件
    win7系统开机启动出现蓝屏,提示BAD_SYSTEM_CONFIG_INFO
    使用mini-textbox控件时 不能获取value值
    为表格动态添加一行,miniui组件无效
    miniui表格load数据成功后,回调函数,其中setData要用如下方法
    路径1
    路径
    dubbo spring bean id冲突
    @Transactional spring 配置事务 注意事项
    Spring事务管理只对出现运行期异常进行回滚
  • 原文地址:https://www.cnblogs.com/Jackpei/p/10879025.html
Copyright © 2011-2022 走看看