山东省第五届ACM大学生程序设计竞赛-Weighted Median(模拟)
2016-04-21 21:04
405 查看
Weighted Median
Time Limit: 2000MS Memory limit: 65536K
题目描述
For n elements x1, x2, ..., xn with positive integer weights w1, w2, ..., wn. The weighted median is the element xk satisfyingand
, S indicates
Can you compute the weighted median in O(n) worst-case?
输入
There are several test cases. For each case, the first line contains one integer n(1 ≤ n ≤ 10^7) — the number of elements in the sequence. The following line contains n integer numbers xi (0 ≤ xi ≤ 10^9). The last line contains n integer numbers wi (0 < wi < 10^9).输出
One line for each case, print a single integer number— the weighted median of the sequence.示例输入
7 10 35 5 10 15 5 20 10 35 5 10 15 5 20
示例输出
20
提示
The S which indicates the sum of all weights may be exceed a 32-bit integer. If S is 5,equals 2.5.
来源
2014年山东省第五届ACM大学生程序设计竞赛题目意思:
给一些数x和它们对应的权值w,按照如图所示公式,s是所有权值w的总和。
求一个xk,使得满足前两个公式。
解题思路:
用结构体保存元素值和权值,先升序排列,累计xk之前的权值和,直到该权值大于s。
/* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:s.cpp * 作 者:单昕昕 * 完成日期:2016年4月20日 * 版 本 号:v1.0 */ #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int N=100000010; struct Node { int x,w; } node ; int cmp(Node a,Node b)//结构体排序 { return a.x<b.x; } int main() { int n; while(~scanf("%d",&n)) { int i; double sum=0;//注意用double for(i=0; i<n; i++) scanf("%d",&node[i].x); for(i=0; i<n; i++) { scanf("%d",&node[i].w); sum+=node[i].w; } sum/=2.0; double s=0; sort(node,node+n,cmp);//升序 for(i=0; i<n; ++i) { s+=node[i].w; if(s>sum) { printf("%d\n",node[i].x); break; } } } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- Transformation 能将 Windows XP/Server 2003 操作系统,完美地模拟成 Windows Vista 的软件
- C++联合体转换成C#结构的实现方法
- 用javascript和css模拟select的脚本
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例