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 
  • 相关阅读:
    拆分跨天的时间数据
    模板
    更换数据库服务器迁移步骤
    缺失索引
    flex布局解说和属性
    Vuejs中关于computed、methods、watch,mounted的区别
    皮囊
    回家
    江苏旅游计划
    重写原生alert,弹出层过一会就消失
  • 原文地址:https://www.cnblogs.com/zwube/p/7134562.html
Copyright © 2011-2022 走看看