有趣的组合数学题;考试时候打满确实挺不容易的……

题目描述

对于一个 $n$ 阶排列 $p$,我们建立一张无向简单图 $G(p)$,有 $n$ 个节点,标号从 $1$ 到 $n$,每个点向左右两侧最近的比它大的点以及比它小的点连边。 形式化地,在 $G(p)$ 中,$\forall u<v$,边 $(u,v)$ 存在当且仅当以下四个条件至少一个成立:

  • $p_u<p_v$,且不存在 $u<i<v$ 满足 $p_u<p_i$;

  • $p_u>p_v$,且不存在 $u<i<v$ 满足 $p_u>p_i$;

  • $p_u<p_v$,且不存在 $u<i<v$ 满足 $p_i<p_v$;

  • $p_u>p_v$,且不存在 $u<i<v$ 满足 $p_i>p_v$。

现在在所有的 $n$ 阶排列中随机选择一个排列 $p$,请求出 $G(p)$ 中三元简单环的期望个数,答案对 $998244353$ 取模。

数据规模与约定

对于所有数据,$1\le n<998244353$。


题目分析

基础的暴力

首先会有个$(C^3_n)^2$的想法:枚举所有的三元环位置以及三个位置各是什么数,再根据这来统计每个三元环的合法贡献。

观察性质:从零开始推式子

提前透露一个模型:

$a+b+1=k, \, {n\choose k}=\sum_i{i-1\choose a}{n-i\choose b}$

感性理解来看相当于枚举一个中间点$i$并将它强制选取,再在它的两端钦定各选$a$,$b$个。这样就能有效地避免重复。

由于这题有非常特殊的建边性质,所以可以先来考虑怎么样形态的三元组才是合法的。

容易发现,三元环的极值一定是在中间点,那么就只存在四种形态的三元组。同时,这四种形态的三元环具有很好的对称性,所以它们方案数是相同的。

下面只考虑一种情况如上图所示。在这种情况下,想要三点间都存在边只能是能让$\max a_{i...k} < a3$.

接下去从最暴力的式子开始推起:

$\sum_{i=1}^{n-2}{n-i\choose2}\sum_{k_1+k_2<i}{i-1\choose k_1}{i-1-k_1\choose k_2}k_1!k_2!(n-k_1-k_2-3)!(n-k_1-k_2-2)$

其中i表示枚举a1的取值;k1,k2表示a1...a3,a3...a2之间夹的数的个数。最后的一项$(n-k_1-k_2-2)$表示将i...k这些数看作一个整体,插空在其他数里的方案数。

然后将后面的组合数拆开:

$\sum_{i=1}^{n-2}{n-i\choose2}\sum_{k_1+k_2<i}{(i-1)!(n-k_1-k_2-2)!\over (i-k_1-k_2-1)!}$

注意到这里变量$k_1+k_2$作为一个整体出现,所以可用$k$来代替:

$\sum_{i=1}^{n-2}{n-i\choose2}\sum_{k=0}^{i-1}{(i-1)!(n-k-2)!\over (i-k-1)!}(k+1)$

最后项$k+1$是因为有$k+1$种$k_1+k_2=k$的方案。这一点比较细节

接下去是换循环顺序和考虑组合数意义的环节:

$\sum_{k=0}^{n-3}\sum_{i=k+1}^{n-2}{(i-1)!\over(i-k-1)!}(n-k-2)!(k+1){n-i\choose2}$

将无关$i$的变量提出,同时在外部乘$k!$来构造内部的组合数:

$\sum_{k=0}^{n-3}(n-k-2)!(k+1)k!\sum_{i=k+1}^{n-2}{(i-1)!\over(i-k-1)!k!}{n-i\choose2}$

$\sum_{k=0}^{n-3}(n-k-2)!(k+1)!\sum_{i=k+1}^{n-2}{i-1\choose k}{n-i\choose2}$

考虑这两个组合数相乘的实际意义。第一个相当于钦定选第$i$个数,再在前$i-1$个数里选出$k$个数;第二个相当于在剩下的$n-i$个数里再选出2个数。那么这一种限制就是上面提到的模型,即将$i$从$k+1$枚举到$n$的总和,相当于是在$n$个数中取出$k+3$个数的方案数。

因此式子可化成这个样子:

$\sum_{k=0}^{n-3}(n-k-2)!(k+1)!{n\choose k+3}$

$n!\sum_{k=0}^{n-3}{(n-k-2)!(k+1)!\over(n-k-3)!(k+3)!}$

由于我们要求的是期望,那么就能把$n!$直接给去了。

$\sum_{k=0}^{n-3}{n-(k+2)\over(k+2)(k+3)}$

$\sum_{k=2}^{n-1}{n-k\over k(k+1)}$

$n\sum_{k=2}^{n-1}{1\over k(k+1)}-\sum_{k=2}^{n-1}{1\over k+1}$

对于前一项式子有:

$n\sum_{k=2}^{n-1}{1\over k(k+1)}=n\sum_{k=2}^{n-1}[{1\over k}-{1\over (k+1)}]=n({1\over 2}-{1\over n})$

而后一项式子是经典的求自然数倒数和,解决方法是分段打表。

节略后的代码如下:

 1 #include<bits/stdc++.h>
 2 typedef long long ll;
 3 const int MO = 998244353;
 4 const int seg[] = {0,227146302,963788543,596373246...};      //此处省略……65K
 5
 6 int n,fac,size,pos;
 7 ll ans,cnt;
 8
 9 int qmi(int a, int b)
10 {
11     int ret = 1;
12     for (; b; b>>=1, a=1ll*a*a%MO)
13         if (b&1) ret = 1ll*ret*a%MO;
14     return ret;
15 }
16 int main()
17 {
18     scanf("%d",&n);
19     ans = (2*n-4)%MO, size = 150000;
20     pos = (n-2)/size, cnt = seg[pos];
21     for (int i=1, mx=n-2-pos*size, sta=pos*size+2; i<=mx; i++)
22         cnt = 1ll*(cnt+qmi(sta+i, MO-2))%MO;
23     printf("%lld\n",(ans-(cnt<<2)%MO+MO)%MO);
24     return 0;
25 }

END

转载于:https://www.cnblogs.com/antiquality/p/10385163.html

【数学 技巧】2.14计数相关推荐

  1. 以XGBoost为代表的集成算法体现的哲学思想与数学技巧

    目录 哲学思想一:抓住主要矛盾 为什么AdaBoost要增加前一次错分样本的权重? 为什么lightGBM可以忽略梯度小的样本? 哲学思想二: 矛盾在一定条件下是可以相互转化的. 为什么随机森林比单一 ...

  2. 10个你未必知道的CSS技巧与14种cssdiv中基本滤镜介绍

    2019独角兽企业重金招聘Python工程师标准>>> 1.CSS字体属性简写规则 一般用CSS设定字体属性是这样做的: font-weight:bold; font-style:i ...

  3. 和为S的连续正数序列(数学技巧,事半功倍)

    和为S的连续正数序列 题目描述 题目分析 双指针/滑动窗口法 C++代码 python代码 纯数学技巧法   数学的基础在算法中的用处大概就是对数字的敏感性了,如果能找到数字的规律,在求解数字的时候往 ...

  4. NOIP中的数学--第6课 计数原理 (上)

    [加法原理与乘法原理] 1.加法原理 完成一个工程可以有n类办法,ai代表第i类方法的数目. 那么完成这件事共有 S = a[1]+a[2]+-+a[n] 种不同的方法. 2.乘法原理 完成一个工程需 ...

  5. [数学知识]高中数学-分类计数原理 分步计数原理

    参考: <分类计数原理与分步计数原理(一)>教学设计 柳州地区民族高级中学 覃艳莉 相关教材:人民教育出版社的全日制普通高级中学教科书(必修)<数学>第二册(下B) 分类计数原 ...

  6. 《天天数学》连载14:一月十四日

    格言作者:阿尔伯特·爱因斯坦(Albert Einstein,1879年3月14日-1955年4月18日),出生于德国符腾堡王国乌尔姆市,毕业于苏黎世联邦理工学院,犹太裔物理学家.爱因斯坦于1879年 ...

  7. 数学教程之14本用于早期数学学习的精美插图儿童读物

    数学是抽象的,许多孩子长大后对数学感到不舒服.几年后,孩子们开始讨厌它.但是,当数学背后有故事时,它会很有趣.有关数学的说明性书籍是完美的跨课程工具,可以以孩子理解的方式向孩子介绍复杂的概念和数学思维 ...

  8. 紫薯第10章数学 kaungbin专题14数论基础

    杂谈 kuangbin14数论Harmonic Number LightOJ - 1234 分段打表 + 欧拉爷爷o(1).(第一次触及了欧拉常熟) 10.1.1 && 10.1.2 ...

  9. 【安安教具】-【数学】-【科学计数法】模拟器 教你如何用python制作科学计数法模拟器 python项目小发明

    科学计数法是一种数字表现形式,可以有效对数值的显示进行折叠. 今天我们来做一款科学计数法模拟器 我们来看看这个功能有什么用处 科学计数法模拟器 这个功能的难点在于bug的处理 会遇到各种错误计算,我们 ...

最新文章

  1. WIN7下,联想A30T通过USB连接上网
  2. php mysqli参数,PHP5 mysqli 绑定参数
  3. linux下如何使用有道词典
  4. python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...
  5. Office 2010 与搜狗输入法兼容问题
  6. mysql5.7bka_mysql5.7的sql优化
  7. 梯度下降法快速教程 | 第一章:Python简易实现以及对学习率的探讨
  8. gorilla websocket无法跨域_聊聊浏览器同源策略与跨域方案详解
  9. Qt4_改变形状的对话框
  10. 【缺陷识别】基于matlab GUI SVM金属表面缺陷分类与测量(带面板)【含Matlab源码 1652期】
  11. 【唐宇迪】opencv实战学习
  12. 计算机有关的科技论文题目,计算机前沿科技论文选题范文 计算机前沿科技专业论文题目如何拟...
  13. Hbuilder和HbuilderX连接夜神模拟器(nox),调试程序
  14. 解决VMware虚拟机由于不小心更改文件路径导致的桌面图标变白,运行exe程序显示找不到路径的错误
  15. 记一次血淋淋的MySQL崩溃修复案例
  16. 找到数组里面缺失的数(C++(绝妙方法))
  17. 参与评选开源软件名单
  18. 字节跳动的产品经理是怎么工作的?
  19. 海康大华宇视等等安防监控摄像头转成WebRTC流实现Web浏览器超低延迟无插件直播新方案
  20. 线性代数复习笔记——第一章

热门文章

  1. Yii-yiic使用
  2. 男人约会动机大揭秘。
  3. MySQL02-升级
  4. heroku_了解如何使用Heroku部署全栈Web应用程序
  5. 影像锐化工具_如何以及为什么要进行工具改造:花在锐化斧头上的时间永远不会浪费...
  6. 域渗透提权之MS14-068
  7. 1027 Colors in Mars
  8. mysql5.6 thread pool_mysql5.6 thread pool
  9. 软件测试培训分享:软件测试初期怎么面试工作?
  10. leetcode--罗马数字转整数--python