SGU 114. Telecasting station 三分or找中位数
来源:互联网 发布:睢阳之战吃人 知乎 编辑:程序博客网 时间:2024/05/21 20:35
题目链接点这儿
一开始想都没想。。。直接上了三分。。。结果。。。sample的答案不一样。。。但是过了。。。然后又看了看。。。发现这不就是高中或者初中出过的求中位数的题么。。。直接找到这些的中位数就行了。。。。如果某一点处人口不止一个,那就把它拆成一个一个的点。然后求中位数。嗯。。。这题就结束了。。。
至于三分的过程,其实就是二分稍微改进的版本,二分只能求单调的函数,如果函数在定义域内不是单调的,那么二分就失效了。当然。。。这时可以用数学上的无穷分逼近,通过分成若干小段逐个二分求区间最值,最后找最大值。
不过有一种现成的算法来解决定义域内为凹函数或者凸函数(即单峰函数,定义域内只有一个极值点)。二分中用到了3个量,begin, medium, end。而三分则是由加了一个r_medium = (medium + end)/2。
这样,每次分割后,不是比较的medium和begin或者end的大小,因为最值不会在某个区间的端点处出现。而是比较medium和r_medium的大小。如果medium比较靠近极值,那么便舍弃r_medium到end这一段,反之则舍弃begin到medium这一段。这样,每次舍去的都是离极值较远的一段,从而保证了每次都没有将极值丢掉。
比如这个就会舍弃掉begin到medium这一段,很明显,极值所在区间并没有舍去
这样反复比较,区间就会越来与靠近极值,这时的medium就可近似认为是所求的极值了
偷懒就把三分的代码放上来了。。。求中位数的过程也没有什么难点。。。
#include <bits/stdc++.h>#define max(a,b) ((a)>(b))?(a):(b)#define min(a,b) ((a)>(b))?(b):(a)#define rep(i,initial_n,end_n) for(int (i)=(initial_n);(i)<(end_n);i++)#define repp(i,initial_n,end_n) for(int (i)=(initial_n);(i)<=(end_n);(i)++)#define eps 1.0E-8#define MAX_N 1010#define INF 1 << 30using namespace std;typedef pair<int, int> pii;typedef pair<double, double> pdd;typedef long long ll;typedef unsigned long long ull;pii a[15010]; int main() { int n; scanf("%d", &n); int minn = INT_MAX, maxx = INT_MIN; rep(i, 0, n) { scanf("%d%d", &a[i].first, &a[i].second); if(minn > a[i].first) minn = a[i].first; if(maxx < a[i].first) maxx = a[i].first; } double b = minn, e = maxx, m = (b+e)/2, mm = (m+e)/2; while(b - e < -eps) { double tmp = 0, tmpp = 0; rep(i, 0, n) { tmp += fabs(a[i].first - m) * 1.0 * a[i].second, tmpp += fabs(a[i].first - mm) * 1.0 * a[i].second; } if(tmp - tmpp < -eps) e = mm; else b = m; m = (b+e)/2, mm = (m+e)/2; } printf("%f\n", m); return 0; }
0 0
- SGU 114. Telecasting station 三分or找中位数
- 【SGU】 114. Telecasting station 中位数
- [sgu]Telecasting station【三分】
- [SGU]114. Telecasting station
- SGU114 Telecasting station 三分
- sgu114 Telecasting station 三分
- sgu 114 Telecasting station
- Sgu 114 Telecasting station
- SGU 114 Telecasting station
- SGU 114 Telecasting station
- SGU 114 Telecasting station
- 114. Telecasting station
- SGU 114 Telecasting station 单峰极值函数
- SGU 114 Telecasting station(水~)
- SGU 114 Telecasting station(二分)
- sgu 465 Fire Station Building 三分
- sgu 524 Buoys(三分加中位数定理)
- sgu 524 Buoys(三分+中位数定理)
- Javascript:提取 对象的方法作为高阶函数的参数 要注意的
- 如何限制用户在某个时间段内禁止登录数据库
- 黑马程序员_C#基础之方法重载总结
- Struts2中的ModelDriven机制及其运用
- 安卓 图片不变型
- SGU 114. Telecasting station 三分or找中位数
- 统计
- 【webservice】生成axis1的webservice客户端代码
- 中文和自定义字体
- <c语言深度解剖>第二章符号笔记
- TOJ 3838: Cow Line -- 排列
- ios 二维码 实现
- 消除SDK更新时的“https://dl-ssl.google.com refused”错误
- makefile添加新的文件类型