• bzoj2729


    一看就知道是数学题,考虑插空法
    由于老师只有两人,所以先对老师进行插空
    这里考虑两种情况:
    1.两个老师站在同一处,即两个男生之间站了两个老师
    这时候需要一个女生站在两个老师之间,再对女生插空,根据乘法原理即2*(n+1)*m*P(m-1,n+2);
    2.两个老师已经被男生隔开了
    这时候即P(2,n+1)*P(m,n+3);
    最后加起来还要乘以n!(即男生排列数)即可

     1 var a,b:array[0..30010] of longint;
     2     i,la,lb,n,m:longint;
     3 
     4 procedure mul(y:longint);
     5   var i,j,x,t:longint;
     6   begin
     7     t:=0;
     8     for i:=1 to la do
     9     begin
    10       x:=a[i]*y+t;
    11       a[i]:=x mod 10;
    12       t:=x div 10;
    13     end;
    14     while t>0 do
    15     begin
    16       inc(la);
    17       a[la]:=t mod 10;
    18       t:=t div 10;
    19     end;
    20   end;
    21 
    22 procedure add;
    23   var i,x,t:longint;
    24   begin
    25     if lb>la then la:=lb;
    26     t:=0;
    27     for i:=1 to la do
    28     begin
    29       x:=a[i]+b[i]+t;
    30       a[i]:=x mod 10;
    31       t:=x div 10;
    32     end;
    33     while t<>0 do
    34     begin
    35       inc(la);
    36       a[la]:=t mod 10;
    37       t:=t div 10;
    38     end;
    39   end;
    40 
    41 begin
    42   readln(n,m);
    43   la:=1;
    44   a[1]:=1;
    45   for i:=1 to m do
    46     mul(n+4-i);
    47   mul(n+1);
    48   mul(n);
    49   lb:=la;
    50   b:=a;
    51   la:=1;
    52   fillchar(a,sizeof(a),0);
    53   a[1]:=2;
    54   mul(n+1);
    55   mul(m);
    56   for i:=1 to m-1 do
    57     mul(n+3-i);
    58   add;
    59   for i:=2 to n do
    60     mul(i);
    61 
    62   for i:=la downto 1 do
    63     write(a[i]);
    64   writeln;
    65 end.
    66   
    View Code
  • 相关阅读:
    字符串的操作
    前端
    HTML标签
    模块与包
    常用模块
    函数进阶
    函数初识
    文件操作
    集合及深浅拷贝
    python中的一些编码问题
  • 原文地址:https://www.cnblogs.com/phile/p/4473052.html
Copyright © 2020-2023  润新知