HDU 5701 中位数计数(思维+暴力)
中位数计数
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2064 Accepted Submission(s): 716
Problem Description
中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。
现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。
Input
多组测试数据
第一行一个数n(n≤8000)
第二行n个数,0≤每个数≤109,
Output
N个数,依次表示第i个数在多少包含其的区间中是中位数。
Sample Input
5
1 2 3 4 5Sample Output
1 2 3 2 1
非常巧妙的思路,佩服
当找到 a[i] 时分三种情况考虑:
1:先去找a[i]的左边,如果左边扫过去时大于a[i]的书出现的次数与小于a[i]的数出现的次数相同,用一个num做计数器,num++和num–,每次num=0时,a[i]就是当前这个序列的中位数,计数器+1。
2:右边亦如此。
3:接下来是左右两边,用一个计数器记录num出现的次数,当左边为num时,右边就为-num,所以相加即为答案,为了防止数组越界,加个大数。
大佬不愧是大佬这思路,蒻苣 ┭┮﹏┭┮
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
const int N = 8000;
int a[N];
int ans[N],cnt[20000];
int main()
{int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++){scanf("%d",&a[i]);ans[i]=1; ///自己也算自己的中位数,所以初始化为1}for(int i=0;i<n;i++){memset(cnt,0,sizeof(cnt));int num = 0;for(int j=i-1;j>=0;j--){ ///往左区间找,看有多少满足a[i]是中位数的if(a[j]<a[i]) num++;else num--;if(num==0) ans[i]+=1; ///如果num=0,则证明此时的小于a[i]的数和大于a[i]的数数量相同,a[i]是中位数cnt[N+num]++;///记录不满住的num的状态的个数,与右区间的合并,形成符合条件的解}num = 0;for(int j=i+1;j<n;j++){if(a[j]<a[i]) num++;else num--;if(num==0) ans[i]+=1;ans[i]+=cnt[N-num];///将左边不满足,右边不满足的合并为满足的++}}for(int i=0;i<n;i++){if(i!=n-1) printf("%d ",ans[i]);else printf("%d\n",ans[i]);}}return 0;
}
HDU 5701 中位数计数(思维+暴力)相关推荐
- HDU 5701:中位数计数
中位数计数 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- 51Nod1682 中位数计数【中位数】
1682 中位数计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平 ...
- HDU5701 中位数计数【中位数+水题】
中位数计数 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- L. Ray in the tube(思维暴力)
L. Ray in the tube(思维&暴力) 思路:思维+暴力. 记:A,BA,BA,B的横坐标距离为xxx. 1.当xxx为奇数时,显然x=1x=1x=1包含所有奇数的情况. 2.当x ...
- HDU 2920 分块底数优化 暴力
其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...
- hdu_5701_中位数计数
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5701 题意:不解释 题解:n^2的方法:sum[j]表示当前枚举的数到第j个数形成的区间里当前数偏离中 ...
- hdu 4876 ZCC loves cards(暴力)
题目链接:hdu 4876 ZCC loves cards 题目大意:给出n,k,l,表示有n张牌,每张牌有值.选取当中k张排列成圈,然后在该圈上进行游戏,每次选取m(1≤m≤k)张连续的牌,取牌上值 ...
- HDU 5696 区间的价值 暴力
区间的价值 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5696 Description 我们定义"区间的价值"为一段区间的最大 ...
- Sasha and a Bit of Relax K倍区间 (前缀和异或 前缀和计数 思维)
(29条消息) CodeForces - 1109A Sasha and a Bit of Relax(思维+异或和,好题)_Frozen_Guardian的博客-CSDN博客 Sasha and a ...
最新文章
- static interface method calls are not supported at language level 1.6
- 链表删除最小值,倒叙
- GlusterFS配置管理(五)
- sharepoint2013保存当前输入的列表
- 2017-9-15-Linux移植:WinSCP软件 SSH Server开启
- ATL学习笔记〔一〕
- 分析windows宿主机Ping不通linux虚拟机的其中一种情况
- 无线运维——J2ME和WAP运维方式的优缺点
- 劳动合同中不写薪资?
- 已火 2 年,Service Mesh究竟给微服务带来了什么?
- 解决CentOS 中部署JasperReport时出错的问题。错误:net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体
- WPF DataGrid 和LINQ to SQL示例程序之一 (提供源代码下载)
- 【报告分享】5G网络切片分级白皮书.pdf(附下载链接)
- python网络爬虫学习笔记(十):数据存储
- Nginx中常用的指令配置详解
- python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...
- Graylog日志管理系统---搜索查询方法使用简介
- Portlet开发指南第三章
- 编译原理c语言词法分析器,用C语言实现一个真正的词法分析器
- h264html实时播放,H5播放H264之websocket
热门文章
- contextmenu的使用
- android contextmenu 自定义,RecyclerView+ContextMenu实现菜单项
- (Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解
- TCP/IP协议族(第四版)已出,不愧是世界计算机优秀畅销精选书籍
- 农业知识图谱搭建和遇到的问题
- Mac QQ 1.1.0 : qq表情插件失效解决方案
- C语言入门(七)——结构体
- 早产儿是什么原因造成的?这些事情宝妈要注意
- hisi3559av100 烧录镜像
- Brooks曾经在UMLChina网站留过言-回忆和送别(1)