[AGC012F]Prefix Median
题目大意:
给定一个长度为$2n-1(n\le50)$的数组$a$,可以重排$a$中的元素,生成一个长度为$n$的数组$b$,其中$b_i$为$a_1\sim a_{2i-1}$的中位数。求对于给定的$a$能生成多少种不同的$b$。
思路:
对$a$进行排序,转化题意。求满足以下3个条件的长度为$n$的数列$b$的个数:
1.$b_i\in\{a_i,a_{i+1},\ldots,a_{2n-i}\}$;
2.对于$(i<j)$,不存在$b_i<b_j<b_{i+1}$;
3.对于$(i<j)$,不存在$b_i>b_j>b_{i+1}$。
用$f[i][j][k]$表示考虑$b$的第$i$位,比它小的可选数有$j$种,比它大的可选数有$k$种。即可用动态规划求得。
每次转移设$l=[a_i\ne a_{i-1}],r=[a_{m-i+1}\ne a_{m-i+2}]$,对应条件1,表示当前转移可以新填的数。若$a_i=a_{i-1}$或$a_{m-i+1}=a_{m-i+2}$则说明不会增加新填的数。
转移1:$f[i-1][j+l][k+r]+=f[i][j][k]$,即当前填的数还是上次的数,但是两边各多出$l$或$r$个可以填。
转移2:$f[i-1][t][k+r+1]+=f[i][j][k](t<j+l)$,表示若将当前填的数变小,左边还剩$t$个可以填,这里本来填的变成了右边的。
转移3:$f[i-1][j+l+1][t]+=f[i][j][k](t<k+r)$,表示若将当前填的数变大,右边还剩$t$个可以填,这里本来填的变成了左边的。
状态$O(n^3)$,转移$O(n)$,时间复杂度$O(n^4)$。
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
constexpr int mod=1e9+;
constexpr int N=,M=;
int a[N],f[N][M][M];
int main() {
const int n=getint(),m=n*-;
for(register int i=;i<=m;i++) a[i]=getint();
std::sort(&a[],&a[m]+);
f[n][][]=;
for(register int i=n;i>;i--) {
const bool l=a[i]!=a[i-],r=a[m-i+]!=a[m-i+];
for(register int j=;j<=m;j++) {
for(register int k=;k<=m;k++) {
if(!f[i][j][k]) continue;
(f[i-][j+l][k+r]+=f[i][j][k])%=mod;
for(register int t=;t<j+l;t++) {
(f[i-][t][k+r+]+=f[i][j][k])%=mod;
}
for(register int t=;t<k+r;t++) {
(f[i-][j+l+][t]+=f[i][j][k])%=mod;
}
}
}
}
int ans=;
for(register int i=;i<=m;i++) {
for(register int j=;j<=m;j++) {
(ans+=f[][i][j])%=mod;
}
}
printf("%d\n",ans);
return ;
}
[AGC012F]Prefix Median的更多相关文章
- 【AtCoder】【DP】【思维】Prefix Median(AGC012)
模的是这位神犇的代码:Atcoder AGC012F : Prefix Median 题意: 在动态中位数那道题上做了一些改动.给你一个序列a,可以将a重新任意排序,然后对于a序列构造出b序列. 假设 ...
- Solution -「AGC 012F」「AT 2366」Prefix Median
\(\mathcal{Description}\) Link. 给定序列 \(\{a_{2n-1}\}\),将 \(\{a_{2n-1}\}\) 按任意顺序排列后,令序列 \(b_i\) 为前 ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- 【AtCoder】AGC012
AGC012 A - AtCoder Group Contest 从最后开始间隔着取就行 #include <bits/stdc++.h> #define fi first #define ...
- A♂G&C012
A♂G&C012 A AtCoder Group Contest 从大到小sort后输出\(a_2+a_4+a_6+\ldots a_{2n}\) 好♂啊,只会背结论/kk B Splatte ...
- AtCoder练习
1. 3721 Smuggling Marbles 大意: 给定$n+1$节点树, $0$为根节点, 初始在一些节点放一个石子, 然后按顺序进行如下操作. 若$0$节点有石子, 则移入盒子 所有石子移 ...
- Spring配置文件标签报错:The prefix "XXX" for element "XXX:XXX" is not bound. .
例如:The prefix "context" for element "context:annotation-config" is not bound. 这种 ...
- No.004:Median of Two Sorted Arrays
问题: There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the ...
- [LeetCode] Find Median from Data Stream 找出数据流的中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
随机推荐
- 继承spring的validator接口,实现对数据的校验
在org.springframework.validation这个包中提供了一些对数据校验的方法,其中Validator接口是其中的一个. 现在用Validator接口,完成对数据的校验. 第一步:先 ...
- 解决“并非来自 Chrome 网上应用店。”
Chrome谷歌浏览器已停用不支持的扩展程序解决方法 第一种方法:(亲测有效) 1.首先把需要安装的第三方插件,后缀.crx 改成 .rar,然后解压,得到一个文件夹 2.再打开chrome://ex ...
- DIV + CSS问题收集
div里面有三列数据,怎么让他竖向排列,在css中怎么设置 https://zhidao.baidu.com/question/712007772597664245.html css设置块元素在div ...
- CodeForces - 682B 题意水题
CodeForces - 682B Input The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — ...
- leetcode-501. Find Mode in Binary Search Tree
Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...
- 【BZOJ2818】Gcd [莫比乌斯反演]
Gcd Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1<=x,y&l ...
- [bzoj3231][SDOI2008]递归数列——矩阵乘法
题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- 创建堆 HeapCreate
创建额外的堆的原因1.对组件进行保护2.更有效的内存管理3.局部访问4.避免线程同步开销5.快速释放 HeapCreate函数原型:HANDLE WINAPI HeapCreate( _In_ DWO ...
- 大型网站调试工具之一(php性能优化分析工具XDebug)
一.安装配置 1.下载PHP的XDebug扩展,网址:http://xdebug.org/ 2.在Linux下编译安装XDebug 引用 tar -xzf xdebug-2.0.0RC3.gzcd x ...
- SPOJ - AMR11H
Array Diversity Time Limit: 404MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Submi ...