HDU4908 - BestCoder Sequence(BestCoder Round #3 计数)
来源:互联网 发布:java能做什么游戏 编辑:程序博客网 时间:2024/06/05 21:12
题目链接 HDU4908
【题意】在1~n的一个排列中找到以m为中位数的连续子序列有多少个。
【分析】先求出sum[i][j],表示左边序列长度(不算m)为奇数或者偶数(j表示奇偶)的时候 大于m个数-小于m个数 的序列个数。
然后遍历m右边长度为奇数个(这时整个序列是奇数个 奇数+奇数+1 = 奇数 或者 偶数+偶数+1 = 奇数)时
小于m-大于m 的个数s时,累加上所有sum[小于m个数-大于m个数][()&1];
因为 左边大于m的数的个数b1+右边大于m的个数b2 = 左边小于m的个数s1+右边小于m的个数s2
这正是当遍历右边的时候 右边小于m个数s2-右边大于m个数b2 = 左边大于m个数b1-左边小于m个数s1(上式移项得到)
【AC CODE】 78ms
#include <cstdio>#include <cstring>#define MAXN 40000int a[MAXN+10], sum[2*MAXN+10][2];//sum[i][j]表示左边序列长度(不算m)为奇数或者偶数(j表示奇偶)的时候 大于m个数-小于m个数 的序列个数,/*然后遍历m右边长度为奇数个(这时整个序列是奇数个 奇数+奇数+1 = 奇数 或者 偶数+偶数+1 = 奇数)时小于m-大于m 的个数s时,累加上所有sum[小于m个数-大于m个数][()&1];因为 左边大于m的数的个数b1+右边大于m的个数b2 = 左边小于m的个数s1+右边小于m的个数s2这正是当遍历右边的时候 右边小于m个数s2-右边大于m个数b2 = 左边大于m个数b1-左边小于m个数s1(上式移项得到)*/int main(){#ifdef SHY freopen("e:\\1.txt","r",stdin);#endif int n,m; while(~scanf("%d %d%*c", &n, &m)) { int ans, mid, p = 0; memset(sum,0,sizeof(sum)); for(int i = 1; i <= n; i++) { scanf("%d%*c", &a[i]); if(m == a[i]) mid = i; }sum[MAXN][0] = 1;//只有一个m的时候 for(int i = mid-1; i >= 1; i--) { if(a[i] > m) p++;else p--;sum[p+MAXN][(mid-i)&1]++; }p = 0;ans = sum[MAXN][0];//先加上所有p为0时的偶数个序列 for(int i = mid+1; i <= n; i++) {if(a[i] > m) p--;else p++;ans += sum[p+MAXN][(i-mid)&1]; } printf("%d\n", ans); } return 0;}
0 0
- HDU4908 - BestCoder Sequence(BestCoder Round #3 计数)
- hdu4908 & BestCoder Round #3 BestCoder Sequence(组合数学)
- HDU4908 BestCoder Sequence
- [BestCoder Round #3] hdu 4908 BestCoder Sequence (计数)
- BestCoder Round #3 BestCoder Sequence
- BestCoder Round #3 1002 BestCoder Sequence
- hdu 4908 BestCoder Sequence && BestCoder Round #3 1002
- HDU 4908 BestCoder Sequence——BestCoder Round #3
- 考试模拟1 BestCoder Round #3 BestCoder Sequence
- hdu 4908 BestCoder Sequence(计数)
- [BestCoder Round #3] hdu 4909 String (状压,计数)
- 【索引】BestCoder Round #3
- BestCoder Round #3
- BestCoder Round #3 小记
- [BestCoder] Round #3
- BestCoder Round #3
- 【枚举计数】HDU5907Find Q【BestCoder Round #88】
- 【计数】HDU5804Price List【BestCoder Round #86】
- ubuntu 配置java
- (c语法百题12)优惠购物
- scala eclipse sbt 应用程序开发
- hdu 1042 N!
- HDU 1757 A Simple Math Problem (矩阵快速幂)
- HDU4908 - BestCoder Sequence(BestCoder Round #3 计数)
- 思科网络技术学院教程——实验——在Packet Tracer中使用TCP/IP协议和OSI模型
- 【eclipse插件开发实战】Eclipse插件开发7——插件发布jar包
- 第二十三周工作总结
- javascript-1
- 广播和泛洪的区别
- jqGrid中的编辑
- hdu 1005 矩阵快速幂
- 将SVN文件从一台电脑拷贝到另一台电脑后,SVN状态无法显示