HDU 5701
来源:互联网 发布:mac excel 公式不计算 编辑:程序博客网 时间:2024/05/29 14:19
感觉这题思路很巧妙啊
题解: o(n*n)的复杂度。
首先因为每个数都是独一无二的,所以说偶数长度的区间是不会成立的,可以简单证明一下,
如果 X1+X2 的平均数 x为中位数,那么 x1<x<x2,这与X1,为相邻大的两个数矛盾。所以不成立
。
接着如果我们可以观察到一个区间如何才能使a[i]成为中位数。
就是区间内的值比x大的数,和比x小的数一样多,
这样就是说设左边比a[i]大的数和小的数分别为 A,B,
右边比a[i]打大的数和比a[i]小的数为C,D,
则 A+C = B+D , A+B+C+D=偶数
有, A - B = D-C.
我们就可以维护一个A - B , D- C ,两个的数量, 看有多少sum1[A-B]==sum2[D-C],就有多少方案。
题解: o(n*n)的复杂度。
首先因为每个数都是独一无二的,所以说偶数长度的区间是不会成立的,可以简单证明一下,
如果 X1+X2 的平均数 x为中位数,那么 x1<x<x2,这与X1,为相邻大的两个数矛盾。所以不成立
。
接着如果我们可以观察到一个区间如何才能使a[i]成为中位数。
就是区间内的值比x大的数,和比x小的数一样多,
这样就是说设左边比a[i]大的数和小的数分别为 A,B,
右边比a[i]打大的数和比a[i]小的数为C,D,
则 A+C = B+D , A+B+C+D=偶数
有, A - B = D-C.
我们就可以维护一个A - B , D- C ,两个的数量, 看有多少sum1[A-B]==sum2[D-C],就有多少方案。
当 两者相等的时候就是满足的情况。
<span style="font-size:24px;">#include<bits/stdc++.h>using namespace std;int sum1[8002*2];int a[8002];int main(){ int n; while(scanf("%d",&n)!=EOF) { for(int i = 1; i<=n; i++) scanf("%d",&a[i]); for(int i = 1; i<=n; i++) { memset(sum1,0,sizeof(sum1)); int ans = 0; int x = 0; sum1[x+n] = 1; for(int j = i-1; j>=1; j--) { a[i]>a[j]?x++:x--; sum1[x+n]++; } x = 0; ans+=sum1[n]; for(int j = i+1; j<=n; j++) { a[i]>a[j]?x++:x--; ans+=sum1[n-x]; } printf("%d%c", ans, i == n? '\n' : ' '); } } return 0;}
0 0
- HDU 5701
- hdu 5701
- HDU 5701 中位数计数
- hdu 5701 中位数计数
- HDU-5701-中位数计数
- HDU 5701 (水题)
- HDU 5701 中位数计数
- HDU 5701:中位数计数
- HDU 5701 中位数计数
- HDU 5701 中位数计数
- HDU 5701 中位数计数
- hdu 5701 中位数计数
- hdu 5701 中位数计数
- hdu 5701 中位数计数
- hdu 5701 中位数计数
- HDU 5701中位数计数
- HDU 5701-中位数计数
- HDU 5701:中位数计数
- [leetcode]Contains Duplicate III
- JAVA经典笔试题目
- 自然语言处理中主题模型的发展
- 基于改进形态学滤波器的点云分类算法
- Codeforces Round #325 (Div. 2) C 模拟
- HDU 5701
- 华为研发工程师编程题----明明的随机数(快排)
- [2016/7/9][USACO1.5][暴力]Prime Palindromes
- Deep Learning Resources
- HTML、CSS中相似的元素、声明以及概念间的差别
- Android初级教程以动画的形式弹出窗体
- HTML转PDF总结
- linux 下 adb 安装apk
- jdk1.6下载