\(\mathcal{Description}\)

  Link.

  给定序列 \(\{a_{2n-1}\}\),将 \(\{a_{2n-1}\}\) 按任意顺序排列后,令序列 \(b_i\) 为前 \(2i-1\) 个数的中位数。求 \(\{b_n\}\) 的个数,对 \(10^9+7\) 取模。

  \(n\le50\)。

\(\mathcal{Solution}\)

  \(\{b_n\}\) 有一个很 naive 的性质:\(b_n\) 是常数,是 \(\{a_{2n-1}\}\) 的中位数。

  考虑扩展这一性质,从后往前,\(b_{i+1}\) 所对应的 \(a\) 序列删去两个数后就得到 \(b_i\) 所对应的序列。显然,\(b_i\) 要么是 \(b_{i+1}\) 在新序列的前驱或后记,要么不变。

  形式地,有性质:

\[(\forall i\in[1,n))(\not\exists j\in[1,n])(b_i<b_j<b_{i+1}\lor b_{i+1}<b_j<b_i)
\]

  接着,考虑到中位数本身的性质,将 \(\{a_{2n+1}\}\) 升序排列后,可以确定每个 \(b_i\) 的范围:

\[a_i\le b_i\le a_{2n-i}
\]

  那么设状态 \(f(i,j,k)\) 表示确定前 \(i\) 位,中位数左边有 \(j\) 个数可用,右边有 \(k\) 个数可用的方案数。转移就……看代码吧 www~

\(\mathcal{Code}\)

#include <cstdio>
#include <algorithm> const int MAXN = 50, MAXM = 100, MOD = 1e9 + 7;
int n, m, a[MAXM + 5], f[2][MAXM + 5][MAXM + 5]; inline void addeq ( int& a, const int b ) { if ( ( a += b ) >= MOD ) a -= MOD; } int main () {
scanf ( "%d", &n ), m = 2 * n;
for ( int i = 1; i < m; ++ i ) scanf ( "%d", &a[i] );
std::sort ( a + 1, a + m );
f[0][0][0] = 1;
for ( int i = n, t = 0; i > 1; -- i, t ^= 1 ) {
bool dl = a[i] ^ a[i - 1], dr = a[m - i + 1] ^ a[m - i];
for ( int j = 0; j < m; ++ j ) {
for ( int k = 0; k < m; ++ k ) {
int& cur = f[t][j][k];
if ( ! cur ) continue;
addeq ( f[t ^ 1][j + dl][k + dr], cur );
for ( int p = 0; p < j + dl; ++ p ) addeq ( f[t ^ 1][p][k + dr + 1], cur );
for ( int p = 0; p < k + dr; ++ p ) addeq ( f[t ^ 1][j + dl + 1][p], cur );
cur = 0;
}
}
}
int ans = 0;
for ( int i = 0; i < m; ++ i ) {
for ( int j = 0; j < m; ++ j ) {
addeq ( ans, f[n & 1 ^ 1][i][j] );
}
}
printf ( "%d\n", ans );
return 0;
}

最新文章

  1. Yii2 vendor出现bower-asset这么解决
  2. sprinvMVC路径拦截
  3. Java IO 之 OutputStream源码
  4. HDU 2897
  5. Android ListVIew 详解(一)
  6. Socket之UDP分包组包
  7. Oracle Goldengate工作原理
  8. [HDU 4549] M斐波那契数列
  9. POJ 1987 Distance Statistics(树的点分治)
  10. 实现标签的添加与删除(tags)
  11. 03(3) 基于GMM-HMM的SR基础
  12. 常量和静态变量会先载入内存后在进行执行php代码
  13. PrintWriter write返回数据显示中文变问号&quot;???&quot;
  14. C#实现基于ffmpeg加虹软的人脸识别demo及开发分享
  15. Unity3d KeyCode 键盘各种键值详情
  16. Zabbix系列之五——监控TCP端口
  17. 使用mutt自动发送邮件
  18. Centos7下搭建LAMP环境,安装wordpress(不会生产博客,只是一名博客搬运工)(菜鸟)
  19. C风格字符串和C++string对象的相互转化
  20. _lottery

热门文章

  1. spring security 登出操作 详细说明
  2. 【填坑往事】使用Rxjava2的distinct操作符处理自定义数据类型去重的问题
  3. LINUX学习-PHP安装
  4. POJCrossing River
  5. SparkSQL学习笔记
  6. 《剑指offer》面试题61. 扑克牌中的顺子
  7. conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  8. Java 异步 I/O
  9. shell循环ping ip的写法
  10. 一劳永逸,解决.NET发布云服务器的时区问题