中位数(rms2017模拟3-1)*【推理】
来源:互联网 发布:局部全局优化算法 编辑:程序博客网 时间:2024/05/18 02:23
中位数(median.cpp)
试题描述:
XHL有一个长度为N的数列{A1,A2,…,AN},这N个数字恰好是 1…N的一个排列。
现在需要统计有多少个子序列{ Ai,Ai+1,…,Aj }满足:i<=j 且 j-i+1 为奇数,序列的中位数 为B。例如{5,1,3}的中位数为 3。 你能帮到XHL吗?
输入格式:
第一行两个正整数N和B。 第二行包含N个整数,第 i 个整数为Ai。
输出格式:
仅包含一个整数,为满足条件的子序列的个数。
输入样例:
7 4
5 7 2 4 3 1 6
输出样例:
4
数据规模:
对于 30%的数据中,满足N<=100; 对于 60%的数据中,满足N<=1000;
对于 100%的数据中,满足N<=100000,1<=B<=N。
题解:
首先,因为中位数是B且序列长度为奇数,那么这个子序列必然要包含B这个数字。接下来我们将小于B的数字看成-1,大于B的数字看成1,B看成0。从B所在位置开始向左扫描,统计i的个数L[i];同理,向右扫描统计R[i]。最终的答案就是∑〖L[i]*R[-i] 〗。
时间复杂度:O(N)
空间复杂度:O(N)
代码:
#include<bits/stdc++.h>#define F( i,a,b ) for( int i=(a);i<=(b);i++ )#define F_2( i,a,b ) for( int i=(a);i>=(b);i-- )#define N 1000001#define M 10001#define LL long long#define oo 0x7fffffffusing namespace std;int read(){ int f=1,s=0; char ch=getchar(); while( ch>'9' || ch<'0' ) { if( ch=='-' ) f=-1; ch=getchar(); } while( ch<='9' && ch>='0' ) { s=( s<<1 )+( s<<3 )+ch-'0'; ch=getchar(); } return f*s;}int m,n,k;int tot,cnt,ans,pos,l_0,r_0;int w[N],l_m[N],l_p[N],r_m[N],r_p[N],a[N];int main(){ freopen( "median.in","r",stdin ); freopen( "median.out","w",stdout ); n=read(); m=read(); F( i,1,n ) { a[i]=read(); if( a[i]==m ) pos=i; } F_2( i,pos-1,1 ) { if( a[i]>m ) w[i]=w[i+1]+1; else w[i]=w[i+1]-1; } F( i,pos+1,n ) { if( a[i]>m ) w[i]=w[i-1]+1; else w[i]=w[i-1]-1; } F( i,1,n ) { if( i<=pos ) { if( w[i]>=0 ) l_p[w[i]]++; else l_m[-w[i]]++; } if( i>=pos ) { if( w[i]>0 ) r_p[w[i]]++; else r_m[-w[i]]++; } } ans+=l_0*r_0; F( i,0,n ) { ans+=l_p[i]*r_m[i]; ans+=l_m[i]*r_p[i]; } cout<<ans<<endl; return 0;}
阅读全文
0 0
- 中位数(rms2017模拟3-1)*【推理】
- 倒水(rms2017模拟2-1)* 【推理】
- Beautiful string(rms2017模拟1-1)*【推理】
- 数位平方和(rms2017模拟14-2)* * *【推理】
- Prison (rms2017模拟1-3)* *【区间dp】
- 数 7(rms2017模拟14-1)* *【打表】
- Tower( rms模拟4-3 ) * *(推理)
- 看守(rms模拟7-3)* * (推理)
- FZU 2202 犯罪嫌疑人(模拟、推理)
- [noip模拟赛]中位数(乱搞)
- noip2003 侦探推理 终极模拟
- [NOIP模拟][数学推理]Math
- 【NOIP 模拟题】中位数(规律+递推)
- [校内模拟]YL杯超级篮球赛(中位数)
- 11.14NOIP考前模拟赛(中位数、敲砖块)
- UVA11387 - The 3-Regular Graph(推理)
- HDU 4927 Series 1(推理+大数)
- hdu 4611 Balls Rearrangement(数学:推理+模拟)
- kobject,kset,子系统层次结构 、platform_device platform_driver
- 杂记
- Tomcat 集群配置
- Java常用算法手册-01算法概述
- 第一次使用Android Studio时你应该知道的一切配置
- 中位数(rms2017模拟3-1)*【推理】
- Hackinglab_Ctf闯关攻略(基础题)(自己部分更改)
- container_of()宏
- 学习用requests, bs4 抓取网页特定的内容
- Linux驱动 device 的probe函数是怎么被调用的
- 交换、比较
- 企业实训day8
- NuttX 入门笔记5 STM32F103C8T6(STM32f103-minimum) PWM测试
- OpenCV2编程手册笔记之 2.2存取像素值