Solution -「AGC 012F」「AT 2366」Prefix Median
\(\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}\) 在新序列的前驱或后记,要么不变。
形式地,有性质:
\]
接着,考虑到中位数本身的性质,将 \(\{a_{2n+1}\}\) 升序排列后,可以确定每个 \(b_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;
}
Solution -「AGC 012F」「AT 2366」Prefix Median的更多相关文章
- Solution -「CTS 2019」「洛谷 P5404」氪金手游
\(\mathcal{Description}\) Link. 有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇
http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回, Arc System Works开发的格斗游戏「GUILTY G ...
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory
Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...
- SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法
用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...
- 「Windows MFC 」「Edit Control」 控件
「Windows MFC 」「Edit Control」 控件
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
- Loj #6069. 「2017 山东一轮集训 Day4」塔
Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...
- Loj #6073.「2017 山东一轮集训 Day5」距离
Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...
随机推荐
- spring boot + redis --- 心得
1.前言 习惯使用springMVC 配置 redis ,现在使用spring boot ,得好好总结怎么在spring boot 配置和使用 ,区别真的挺大的. 2.环境 spring boot ...
- Python之路 - Day4 - Python基础4 (新版)
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- 灵雀云开源网络插件Kube-OVN 1.4.0 版发布!支持跨集群容器网络、NetworkPolicy 日志
从 1.4 开始 Kube-OVN 支持将多个 Kubernetes 集群容器网络打通,不同集群之间的 Pod 可以通过 Pod IP 直接互相通信.本版本还支持 ACL 日志,可以记录因 Netwo ...
- HDU 2018 母牛的故事 (递归入门)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018 思路分析: 问题分析:这道题的递推关系非常类似斐波那契数列,由题意不难得到以下函数递推式: 对于 ...
- JavaScript 中BOM的常用操作
JavaScript BOM操作 1.获取浏览器窗口尺寸 var width=window,innerWidth //获取可视窗口宽度 var height=window.innerHeight // ...
- Java中运算符及其优先级、自动类型提升、类型转化
自动类型提升的规则 两个操作数中有一个为double型的数据,计算结果提升为double. 两个操作数中无double型,有一个float,计算结果自动提升为float. ...
- 看看CSDN的吃相
大伙快来看看CSDN的吃相.
- qt 简单登录界面(一)
widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QLineEdit> class ...
- golang中的map
1. 声明与初始化 // map的声明与初始化 userInfo := map[string]string{"name": "马亚南", "age&q ...
- ubuntu输入正确密码重新跳到登录界面
原因一:/etc/profile或者/etc/enviroment 配置错误 (很多开发人员在配置完java环境之后容易出现这种情况) 解决办法(已验证): 1,开机后在登录界面按下shift+c ...