HDU-4908(思维之贡献问题)
来源:互联网 发布:苜蓿地 知乎 编辑:程序博客网 时间:2024/06/18 17:39
题意:给一个N个数的序列,然后给出一个M,问以M为中位数的奇数长度的子序列序列个数。
思路:训练时做的理解错题意了,一上来就连WA几次,中位数的概念都忘了,真是伤..中位数:一组按大小顺序排列起来的数据中处于中间位置的数。
正解思路是:将大于m的数的位置贡献1,小于m的数的位置贡献-1,等于m的数的位置贡献0。然后找到最后一个等于m的位置,取其前面若干个以及其后面的若干个组成奇数个的贡献总和为0,则就是一个满足条件的子序列。
考虑多了,忽略下文,人家题目是n个不同的数。->(本题漏洞:数据太弱了吧估计,在组成子序列的时候,没有判断序列共奇数个的代码也能AC。)
Code:
#include <bits/stdc++.h>using namespace std;const int maxn = 40000;int num[maxn+5], cnt[2][maxn*2+5];//去掉第一维就是不判断序列奇偶int main(){int n, m, x, id, sum, ans;while(~scanf("%d %d", &n, &m)){memset(num, 0, sizeof num);memset(cnt, 0, sizeof cnt);ans = 0;for(int i = 1; i <= n; ++i){scanf("%d", &x);if(x > m) num[i] = 1;else if(x < m) num[i] = -1;else num[i] = 0, id = i;}sum = 0;for(int i = id; i >= 1; --i){sum += num[i];++cnt[(id-i)%2][sum+maxn];}sum = 0;for(int i = id; i <= n; ++i){sum += num[i];ans += cnt[(i-id)%2][-sum+maxn];}printf("%d\n", ans);}return 0;}
继续加油~
阅读全文
1 0
- HDU-4908(思维之贡献问题)
- hdu 5288 简单思维 贡献思维
- HDU 4883(区间选点贡献经典问题)
- 思维训练 之 hdu 4545
- hdu 4908 思维题目
- hdu 汉诺塔问题详解 思维问题
- 三门问题之概率思维
- hdu 2212 dfs 简单的思维问题
- hdu 4473 Exam (思维题 问题转化)
- hdu 6048 Puzzle 思维(8数码问题
- HDU 4908 BestCoder Sequence 思维
- 【自我管理】思维方式之问题意识
- codeforces Karen and Coffee (区间贡献 思维)
- codeforces Karen and Coffee (区间贡献 思维)
- hdu 4908 BestCoder Sequence (思维题)
- HDU-4908-BestCoder Sequence【思维题】
- HDU ACM 4473 Exam->数论(思维-问题转换)
- HDU 4243 排列循环节问题-思维-(排列组合)
- Java泛型 理解
- javaScript设计模式与开发实践-单例模式
- 控制反转(IoC)与依赖注入(DI)的学习资料
- poj -- 2976 【基本0--1 分数规划题】
- 微信公众号多媒体文件的处理
- HDU-4908(思维之贡献问题)
- Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解
- 0---1 分数规划
- mysql 下载 链接
- 关于Const跟volatile
- 使用Eclipse运行Servlet出现500错误 提示Error instantiating servlet class
- mac laravel安装属组属主问题
- 七牛云 Java Web上传图片
- SQL语句拼接常加 where 1=1 的原因