• HNOI 排队


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

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

    样例输入

    1 1

    样例输出

    12

    码量很小,关键是式子和高精。

    插空和捆绑思想,加法定理。

    先插入两个老师,因为老师只有两个,而男生就算只有一个也可以隔开,但先插入女生的话可能有未隔开但需要老师隔开的情况。

    考虑老师有两种情况

    (一开始我只考虑了一种,且先插入的是女生,然后样例过了,一直认为自己的式子是对的认为高精上出了错...不要轻信样例

       然后发现要先插入老师,该成这个后样例就过不了了,开始水样例手摸,终于发现少了一种情况...)。

    A(n,n)*A(n+1,2)*A(n+3,m)+A(n,n)*A(n+1,1)*A(2,2)×A(m,1)×A(n+2,m-1)

    第一种:A(n,n)*A(n+1,2)*A(n+3,m);不让两个老师挨着插入,然后插空法插入女生;

    第二种(易忽略):两个老师一开始可以挨着啊,然后用女生来隔开(没有手摸感觉我是找不出来了...)

    所以让一个女生和两个老师绑在一起插空。但这里需要注意女生有m个所以有m种,老师之间也有两种排法;

    A(n,n)*A(n+1,1)*2*m*A(n+2,m-1)(剩下的女生插空);

    或者写成A(n,n)*A(n+1,1)*A(2,2)[两个老师间]×A(m,1)[写成C(m,1)也行,m个里选出一个](三捆绑插空及内部)×A(n+2,m-1);

    高精上:只用高精乘低精和高精加就行,把A除的式子直接消去分母,注意不要用高精乘高精,同一个大式子里用一个数组一直高精乘低精,会快很多。

    总结:

    1.不要迷信样例和自己的式子;

    2.手动模拟的好处;

    3.每一个点和式子,每一种情况都要考虑到位(分情况);

    4.简化消去式子,高精变低精。

    5.能优化的地方一定要优化。

  • 相关阅读:
    JS表格测试
    2018电脑选购配置
    一句话技巧总结
    我的码风
    友情链接
    写代码时需要注意的一些东西
    他是 ISIJ 第四名,也是在线知名题库的洛谷“网红”
    从并查集的按秩合并看一类构造性问题
    高一上期末考游记
    P3233 [HNOI2014]世界树
  • 原文地址:https://www.cnblogs.com/three-D/p/11110286.html
Copyright © 2020-2023  润新知