CCF201612-1 中间数
来源:互联网 发布:云南省软件行业协会 编辑:程序博客网 时间:2024/05/01 09:56
问题描述
在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
给定一个整数序列,请找出这个整数序列的中间数的值。
给定一个整数序列,请找出这个整数序列的中间数的值。
输入格式
输入的第一行包含了一个整数n,表示整数序列中数的个数。
第二行包含n个正整数,依次表示a1, a2, …, an。
第二行包含n个正整数,依次表示a1, a2, …, an。
输出格式
如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。
样例输入
6
2 6 5 6 3 5
2 6 5 6 3 5
样例输出
5
样例说明
比5小的数有2个,比5大的数也有2个。
样例输入
4
3 4 6 7
3 4 6 7
样例输出
-1
样例说明
在序列中的4个数都不满足中间数的定义。
样例输入
5
3 4 6 6 7
3 4 6 6 7
样例输出
-1
样例说明
在序列中的5个数都不满足中间数的定义。
评测用例规模与约定
对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。
我的分析:
比较容易想到先排序,找到排序后的中间数,数出其左右各有多少数,若相等,则输出中间数,不等,则输出-1.
想法较简单,操作方法也较多。
map有自动进行排序的功能,做首先考虑。
此外,还有C++封装一些排序算法。
程序如下:
解法一(map容器):
#include <iostream>#include <map>using namespace std;int main(){ int n,v; map<int, int> m; map<int, int>::iterator it; cin >> n; for(int i=0; i<n; i++) { cin >> v; m[v]++; } int mid = (n+1)/2; int value, cont=0, left; for(it=m.begin(); it!=m.end(); it++) { if(it->second+cont >= mid) { left = cont; cont = 0; value = it->first; } else cont += it->second; } if(cont == left) cout << value << endl; else cout << -1 << endl;}
解法二(sort):
#include <iostream>#include <algorithm>using namespace std;int main(){ int n, v; int a[1005]; int i, left, right, mid, value; cin >> n; for(i=0; i<n; i++) cin >> a[i]; sort(a, a+n); //排序算法 mid = n/2; left = mid; right = n-mid-1; for(i=mid-1; i>=0; i--) { if(a[i]==a[mid]) left--; else break; } for(i=mid+1; i<n; i++) { if(a[i]==a[mid]) right--; else break; } if(left == right) cout << a[mid] << endl; else cout << -1 << endl; return 0;}
阅读全文
0 0
- CCF201612-1中间数
- CCF201612-1-中间数
- CCF201612-1中间数
- CCF201612-1 中间数
- CCF201612-1 中间数
- CCF201612-1 中间数(100分)
- CCF201612-1 中间数(解法二)(100分)
- CCF201612-1 中间数(解法三)(100分)
- CCF201612-1
- ccf201612-1
- CCFCSP201612-1中间数
- 201612-1 中间数
- 201612-1中间数
- 201612-1中间数
- CCF 201612-1 中间数
- CCF 201612-1 中间数
- CCF 201612-1 中间数
- CCF-201612-1-中间数
- 利用SSH工具连接虚拟机上的CentOS 6.5
- 编写Spark SQL查询程序
- 关于同步异步、阻塞非阻塞的解释
- Android 数字显示带E(科学计数法)
- FreeSWITCH的端口设置
- CCF201612-1 中间数
- 01背包问题详解(转载)
- 数组与指针
- 求解有向图的强联通分量--tarjan算法(tarjian求最小环模板)
- Centos7下利用strongsman搭建vpn
- CATRT剪枝算法
- Java学习---6
- rhcsa学习杂记—重置centos7 系统ROOT密码
- webmagic爬取渲染网站