zoukankan      html  css  js  c++  java
  • yLOI2019 青原樱

    链接

    看完题目,结论就是:一道五三的题(应该吧_(:з」∠)_

    反正是一道数论题

    Idea

    首先,看到这种“一个空位”的问题,第一想法就是把一棵樱花和它后面的空位视为一组(或者一个数).

    另外我们可以发现,如果最后一个元素在(n)位置上时,那么是不用考虑它后面的那个空位的.

    所以思路就出来了:分类讨论.

    1. 如果最后一个元素不在(n)位置上,那么此时相当于有(n-m)个空位,要插入(m)个元素,再加上这(m)个元素自身的排列,总共有(A_m^mC_{n-m}^m) 种合法方案.
    2. 如果如果最后一个元素在(n)位置上,那么此时相当于有((n-1)-(m-1)=n-m)个空位,要插入(m-1) 个元素,同样加上他们自身的排列,总共有 (A_m^m C_{n-m}^{m-1}) 种方案.

    又因

    [A_m^mC_{n-m}^{m-1}=mast A_{n-m}^{m-1}, A_m^mC_{n-m}^m=A_{n-m}^m ]

    我们直接处理排列数即可.

    求和,而我们知道(A_x^y+yast A_x^{y-1}=A_{x+1}^y)
    这样就可以一遍用(O(n))求得最后的值.

    Code

    于是代码就有了

    int main(){
    	int type=read(),n=read(),m=read(),p=read();
    	int ans=1;
    	for(int i=n-m*2+2;i<=n-m+1;i++) ans=(ans*i)%p;
    	printf("%lld",ans);
    	return 0;
    }
    
  • 相关阅读:
    混杂模式
    消息队列学习
    item21
    消息队列改写
    socket select模型
    EffectiveC++ Item11
    How to read a PCap file from Wireshark with C++
    winsock select学习
    线程安全与可重入函数
    process explorer 查看句柄或者加载的dll
  • 原文地址:https://www.cnblogs.com/cbyyc/p/11446414.html
Copyright © 2011-2022 走看看