51Nod-1682-中位数计数
来源:互联网 发布:嵌入式网络编程 编辑:程序博客网 时间:2024/06/05 02:31
ACM模版
描述
题解
这里,我们可以分析得到,符合规则的区间有四种形式,分别是:
// i (1)// j---i (2)// i---j (3)// j'--i--j" (4)
而这里,第一种不用过多处理,就是1;第2种和第3种类似,所以,我们需要求出来i之前的num的匹配情况,和i之后的num的匹配情况;而第四种要求的是,在第2种和第3种的基础上,进行匹配,匹配成功则符合第4种,这样子,我们把四种情况的结果加在一起也就是答案了。
当然,我们还需要枚举每一个i。
代码
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 8008int num[MAXSIZE];int arr[MAXSIZE];int cnt[MAXSIZE];int sum[MAXSIZE * 2];// 输入intvoid scanfDiy(int *ret){ char c; *ret = 0; while((c = getchar()) < '0' || c > '9'); while(c >= '0' && c <= '9') *ret = (*ret) * 10 + (c - '0'), c = getchar(); return ;}// 符合规则的区间分为以下几种// i (1)// j---i (2)// i---j (3)// j'--i--j" (4)int main(int argc, const char * argv[]){ int n; while (~scanf("%d", &n)) { for (int i = 1; i <= n; i++) { scanfDiy(num + i); } for (int i = 1; i <= n; i++) { int temp = num[i]; memset(arr, 0, sizeof(arr)); memset(sum, 0, sizeof(sum)); int res = 0; // 存num[i]左边区间比num[i]大小情况 for (int j = i - 1; j >= 1; j--) { arr[j] = arr[j + 1] + ((num[j] > temp) ? -1 : 1); sum[arr[j] + n]++; // 防止越界 相同情况出现的次数 if (arr[j] == 0) // 为0时,从j到i区间符合规则 { res++; // (2) } } // 存num[i]右边区间比num[i]大小情况 for (int j = i + 1; j <= n; j++) { arr[j] = arr[j - 1] + ((num[j] > temp) ? 1 : -1); if (sum[arr[j] + n] > 0) // 左右匹配 { res = res + sum[arr[j] + n]; // (4) } if (arr[j] == 0) // 为0时,从i到j区间符合规则 { res++; // (3) } } cnt[i] = res + 1; //此处+1的情况为(1) } for (int i = 1; i < n; i++) { printf("%d ", cnt[i]); } printf("%d\n", cnt[n]); } return 0;}
0 1
- 51Nod-1682-中位数计数
- 51nod-1682 中位数计数
- 51nod 1682 中位数计数
- 51NOD 1682 中位数计数
- 51nod-1682 中位数计数
- 51nod 1682 中位数计数
- 51nod 1682 中位数计数
- 51nod 1682 中位数计数【想法题】
- 51 nod 1682 中位数计数(前缀和)
- 51nod 1682-中位数计数(前缀和)
- 51Nod1682 中位数计数【中位数】
- 51Nod-1352-集合计数
- HDU-5701-中位数计数
- 51Nod-1645-中位数变换
- 集合计数 51Nod
- 中位数计数
- 中位数计数
- 中位数计数
- Form表单提交失败问题
- Andriod测试错误 Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter 解决
- EXP-00026:指定了冲突模式
- 常用排序算法
- [iOS]如何把App打包成ipa文件,然后App上架流程[利用Application Loader]
- 51Nod-1682-中位数计数
- 文字滚动形成
- POJ 3077-Rounders
- c语言学习---基本命令
- 初学Redis(4)——简单实现Redis缓存中的排序功能(转载)
- C#正则表达式校验,判断文件是否存在,复制保存
- html5-css简介和属性:border、background、font
- 框架-框架的侵入性-解释
- 强烈推荐!教你测试手机网页的五大方法