[HihoCoder1596]Beautiful Sequence
题目大意:
\(n(n\le60)\)个数\(A_{1\sim n}\),将这些数随机打乱,问最后构成的数列满足对于所有的\(2\le i\le n-1\),都有\(2A_i\le A_{i-1}+A_{i+1}\)的概率。
思路:
显然题目要求的是构成下凸函数的概率。
将所有数排序,考虑最小值在中间,往两遍加数。
\(f[i][j][k][l]\)表示左边第一个数是\(i\),左边第二个数是\(j\),右边第一个数是\(k\),右边第二个数是\(l\)的方案数。对于每个状态,枚举新增的数放左边或右边即可。
注意特殊处理一开始的边界情况。
时间复杂度\(\mathcal O(n^4)\)。
源代码:
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int N=61,mod=1e9+7;
int a[N],f[N][N][N][N];
int main() {
int n=getint();
for(register int i=1;i<=n;i++) a[i]=getint();
std::sort(&a[1],&a[n]+1);
int cnt=0;
for(register int i=1;i<=n&&a[i]==a[1];i++) cnt++;
for(register int i=cnt;i<=n;i++) a[i-cnt+1]=a[i];
a[0]=a[1];
n-=cnt-1;
for(register int i=f[1][0][1][0]=1;i<=cnt;i++) {
f[1][0][1][0]=(int64)f[1][0][1][0]*i%mod;
}
for(register int i=1;i<n;i++) {
for(register int j=0;j<i;j++) {
for(register int k=1;k<n;k++) {
for(register int l=0;l<k;l++) {
const int t=std::max(i,k)+1;
if(a[i]*2<=a[t]+a[j]) {
(f[t][i][k][l]+=f[i][j][k][l])%=mod;
}
if(a[k]*2<=a[t]+a[l]) {
(f[i][j][t][k]+=f[i][j][k][l])%=mod;
}
}
}
}
}
int ans=0;
for(register int i=0;i<=n;i++) {
for(register int j=0;j<=n;j++) {
for(register int k=0;k<=n;k++) {
for(register int l=0;l<=n;l++) {
if(i==n||j==n||k==n||l==n) {
(ans+=f[i][j][k][l])%=mod;
}
}
}
}
}
printf("%d\n",ans);
return 0;
}
[HihoCoder1596]Beautiful Sequence的更多相关文章
- Beautiful Sequence
Beautiful Sequence 给定一些数(可能相同),将它们随机打乱后构成凹函数,求概率 .N<=60 . 首先,这种题求概率事实上就是求方案.所以现在要求的是用这些数构成凹函数的方案数 ...
- Codeforces Round #604 (Div. 2) D. Beautiful Sequence(构造)
链接: https://codeforces.com/contest/1265/problem/D 题意: An integer sequence is called beautiful if the ...
- hihoCoder 1596 : Beautiful Sequence
Description Consider a positive integer sequence a[1], ..., a[n] (n ≥ 3). If for every 2 ≤ i ≤ n-1, ...
- Solution -「Gym 102956B」Beautiful Sequence Unraveling
\(\mathcal{Description}\) Link. 求长度为 \(n\),值域为 \([1,m]\) 的整数序列 \(\lang a_n\rang\) 的个数,满足 \(\not\ ...
- CodeForces 544A
You are given a string q. A sequence of k strings s1, s2, ..., sk is called beautiful, if the concat ...
- cf 403 D
D. Beautiful Pairs of Numbers time limit per test 3 seconds memory limit per test 256 megabytes inpu ...
- CF Set of Strings
Set of Strings time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- F - Set of Strings
You are given a string q. A sequence of k strings s1, s2, ..., sk is called beautiful, if the concat ...
- Codeforces Round #302 (Div. 2) A. Set of Strings 水题
A. Set of Strings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544/pr ...
随机推荐
- Linux/Unix系统编程手册 第一章:历史和标准
Unix的开发不受控于某一个厂商或者组织,是由诸多商业和非商业团体共同贡献进行演化的.这导致两个结果:一是Unix集多种特性于一身,二是由于参与者众多,随着时间推移,Unix实现方式逐渐趋于分裂. 由 ...
- C++ Primer 5th 第19章 特殊工具与技术
C++是一种通用型语言,其设计者希望它能处理各种各样的问题,因此除了一些能适用于所有问题的语言特性,还有一些适用于特定问题的特性. 控制内存分配 某些程序对内存分配有着特殊的需求,它们不适合使用标准的 ...
- 【codeforces】【比赛题解】#948 CF Round #470 (Div.2)
[A]Protect Sheep 题意: 一个\(R*C\)的牧场中有一些羊和一些狼,如果狼在羊旁边就会把羊吃掉. 可以在空地上放狗,狼不能通过有狗的地方,狼的行走是四联通的. 问是否能够保护所有的羊 ...
- 85.YCbCr与YUV的区别
yuv色彩模型来源于rgb模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域. YCbCr模型来源于yuv模型,应用于数字视频,ITU-R BT.601 recommendation 通过 ...
- Python爬取微信好友
前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 来源: 痴海 链接: https://mp.weixin.qq.com/ ...
- eclipse导入/导出项目要注意三个地方
这个三个地方的jdk必须保持一致,不报错
- HttpRunner接口自动化测试框架
简介 2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试 ...
- appium----【Mac】address already in user 127.0.0.1:4725,端口被占用的查找与kill进程
报错截图示例: 解决方法: Mac: lsof -i tcp:4723 #查看端口号 sudo kill -9 29443 #杀死进程 Windows: netstat -aon|fi ...
- FlumeNG介绍及安装部署
本节内容: Flume简介 Flume NG核心组件 Flume部署种类 Flume单机安装 一.Flume简介 Flume是一个分布式.可靠.高可用的海量日志聚合系统,支持在系统中定制各类数据发送方 ...
- React.js学习之环境搭建
1 工欲善其事必先利其器:前端开发工具 1.1 WebStorm和Sublime Text Sublime Text:作为代码编辑器,Sublime Text的优点如下: 主流前端开发编辑器 体积较小 ...