zoukankan      html  css  js  c++  java
  • 组合数学+高精度 BZOJ2729 [HNOI2012]排队

    2729: [HNOI2012]排队

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 1787  Solved: 845
    [Submit][Status][Discuss]

    Description

    某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)
     

    Input

    只有一行且为用空格隔开的两个非负整数 n m,其含义如上所述。
     
    对于 30%的数据 n≤100,m≤100
     
    对于 100%的数据 n≤2000,m≤2000

    Output

    输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数。注意答案可能很大。

    Sample Input

    1 1

    Sample Output

    12

    HINT

    Source

    day1

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,m;
     7 const int mod=100000000;
     8 struct data{
     9     long long num[100010];
    10     int len;
    11     void print(){
    12         printf("%lld",num[len]);
    13         for(int i=len-1;i>=1;i--) printf("%08lld",num[i]);
    14     }
    15 }a;
    16 void cheng(int x){
    17     for(int i=1;i<=a.len;i++) a.num[i]*=x;
    18     for(int i=1;i<=a.len;i++) a.num[i+1]+=a.num[i]/mod,a.num[i]%=mod;
    19     while(a.num[a.len+1]) a.len++,a.num[a.len+1]+=a.num[a.len]/mod,a.num[a.len]%=mod; 
    20 }
    21 int main(){
    22     scanf("%d%d",&n,&m);
    23     a.len=1;
    24     a.num[1]=1;
    25     for(int i=2;i<=n;i++) cheng(i);
    26     cheng(n+1);
    27     cheng((n+3)*n+2*m);
    28     for(int i=n+4-m;i<=n+2;i++) cheng(i);
    29     a.print();
    30     return 0;
    31 }
    32 
  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/zwube/p/7134562.html
Copyright © 2011-2022 走看看