• 题意:对于某个序列,若\(1\le i\le n\),\(1\le j\le i\)且\(p_j>p_i\),或者\(1\le i\le n\),\(i<j \le n\)且\(p_j>p_i\),那么就可以在\(i\)和\(j\)之间连一条边,求有多少能够成环的长度为\(n\)的序列.

  • 题解:对于长度为\(n\)的序列,也就是有\(n\)个点,那么要成环的话,边数必须\(\ge n\),所以我们要让能连的边数\(<n\),再思考一下,对于每个数,除了\(n\),对于\([1,n-1]\)范围的数,每个数都有比它大的数,所以最小的总边数一定是\(n-1\),再转换一下,也就是说,假如某个数的两边都有比它大的数,那么就一定会成环.直接求成环数可能不好求,我们用总情况\(n!\)-\(不能成环数\).如果一个序列不能成环,那么所有数的两边不可能有数都比它本身大,也就是不能有波谷,那么我们从\([1,n]\)从小到大依次放(保证两头小,中间大),每个数都有两种选择,放在最左侧或最右侧,最后一定会剩下一个数别无选择,所以总情况是\(2^{n-1}\),那么最后答案就是\(n!-2^{n-1}\)啦~~

  • 代码:

    int n;
    
    int main() {
    //ios::sync_with_stdio(false);cin.tie(0);
    scanf("%d",&n); ll sum=1;
    for(int i=1;i<=n;++i){
    sum=sum*i%mod;
    }
    ll tmp=1;
    for(int i=1;i<n;++i){
    tmp=tmp*2%mod;
    } printf("%lld\n",(sum-tmp+mod)%mod); return 0;
    }

最新文章

  1. C#设计模式-模板方法模式
  2. 一、Ubuntu14.04下安装Hadoop2.4.0 (单机模式)
  3. Java工程图标前面的红色叹号
  4. Virtual Box 杂记
  5. codevs1958 刺激
  6. Android之View和SurfaceView
  7. 【python】获取高德地图省市区县列表
  8. C# 获取打印机列表以及串口
  9. 让你分分钟读懂CPU架构及芯片厂商
  10. 针对初学者的A*算法入门详解(附带Java源码)
  11. asp.net实现手机号码归属地查询,代码如下
  12. C语言里的指针探析——type *name[] 在函数参数里面,是一个二维指针
  13. Arduino 串口篇 Arduino发送十六进制 send HEX via serial port RS232-to-USB to PC
  14. Python快速入门(2)
  15. HTTP2的新特性
  16. Hadoop问题:Incorrect configuration: namenode address dfs.namenode.rpc-address is not configured
  17. vue学习笔记3
  18. 校园生活app结对开发第二天
  19. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
  20. DevExpress中GridControl的使用笔记(转)

热门文章

  1. mysql中的基本注入函数
  2. 【EXPDP】expdp/impdp数据泵远程导入导出
  3. React 入门-redux 和 react-redux
  4. Numpy的一些学习记录
  5. STL_常用的算法
  6. https://twistedmatrix.com/documents/current/core/howto/defer.html
  7. Go语言学习笔记(1)——顺序编程
  8. VMware vCenter 6.0 安装及群集配置介绍(转载)
  9. 通过spring statemmachine 自定义构建属于自己的状态机(两种方式)
  10. 数据中心网络技术新贵:VXLAN与园区网络虚拟化