zoukankan      html  css  js  c++  java
  • 【HNOI2012】排队

    做题状态很迷啊。

    题面

    https://www.luogu.org/problem/P3223

    题解

    本来想的是$$ans=A_{n}^{n} A_{n+1}^{m} A_{n+m+1}^{2}$$,先男生、后女生、最后老师,后来发现假了,因为可以两个女生一开始相邻,但是后来老师插进去把他们分离了。

    换一种考虑顺序:先男生、后老师、最后女生,分两种情况讨论:

    1. 老师和老师间有男生(按上面的方法算即可)
    2. 老师和老师间只有一个女生(先把两个老师看做一个点,考虑女生时再把两个老师和插进去的女生看做一个点,再按上面方法算即可)

    $$ans=A_{n}^{n} A_{n+1}^{2} A_{n+3}^{m} + 2 A_{n}^{n} A_{n+1}^{1} A_{m}^{1} A_{n+2}^{m-1}$$

    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    #define N 12000
    #define ri register int
    
    using namespace std;
    
    int a[N+1],b[N+1];
    
    void mul(int x) {
      for (ri i=0;i<N;i++) a[i]*=x;
      for (ri i=0;i<N;i++) a[i+1]+=a[i]/10,a[i]%=10;
    }
    void mul2(int x) {
      for (ri i=0;i<N;i++) b[i]*=x;
      for (ri i=0;i<N;i++) b[i+1]+=b[i]/10,b[i]%=10;
    }
    
    int main() {
      int n,m;
      scanf("%d %d",&n,&m);
      if (m>n+3 || 2>n+m+1) {
        printf("0");
        return 0;
      }
      a[0]=1;
      for (ri i=1;i<=n;i++) mul(i);
      for (ri i=n+1;i>=n;i--) mul(i);
      for (ri i=n+3;i>=(n+3)-m+1;i--) mul(i);
      b[0]=1;
      for (ri i=1;i<=n;i++) mul2(i); mul2(n+1); mul2(2); mul2(m);
      for (ri i=n+2;i>=(n+2)-(m-1)+1;i--) mul2(i);
    
      for (ri i=0;i<N;i++) a[i]+=b[i],a[i+1]+=a[i]/10,a[i]%=10;
      int fl=0;
      for (ri i=N-1;i>=0;i--) {
        if (a[i]) fl=1;
        if (fl) printf("%d",a[i]);
      }
      return 0;
    }
  • 相关阅读:
    GoF23种设计模式之己见
    全面阐述某系统设计所实现的质量属性战术
    对XX系统的可用性和易用性改良
    《淘宝网》的质量属性描述
    读《架构漫谈》之后
    软件架构之再理解
    《架构之美》阅读笔记06
    《架构之美》阅读笔记05
    《架构之美》阅读笔记04
    《架构之美》阅读笔记03
  • 原文地址:https://www.cnblogs.com/shxnb666/p/11437759.html
Copyright © 2011-2022 走看看