SGU 114. Telecasting station 三分or找中位数
题目链接点这儿
一開始想都没想。。。直接上了三分。。。结果。。。sample的答案不一样。。。可是过了。。。然后又看了看。
。
。
发现这不就是高中或者初中出过的求中位数的题么。
。
。直接找到这些的中位数即可了。。。。假设某一点处人口不止一个。那就把它拆成一个一个的点。
然后求中位数。
嗯。。。
这题就结束了。
。
。
至于三分的过程,事实上就是二分略微改进的版本号。二分仅仅能求单调的函数,假设函数在定义域内不是单调的,那么二分就失效了。当然。
。。这时能够用数学上的无穷分逼近,通过分成若干小段逐个二分求区间最值,最后找最大值。
只是有一种现成的算法来解决定义域内为凹函数或者凸函数(即单峰函数。定义域内仅仅有一个极值点)。
二分中用到了3个量,begin, medium, end。而三分则是由加了一个r_medium = (medium + end)/2。
这样。每次切割后。不是比較的medium和begin或者end的大小,由于最值不会在某个区间的端点处出现。而是比較medium和r_medium的大小。假设medium比較靠近极值,那么便舍弃r_medium到end这一段,反之则舍弃begin到medium这一段。这样,每次舍去的都是离极值较远的一段,从而保证了每次都没有将极值丢掉。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lub3Jvcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
比方这个就会舍弃掉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 << 30
using 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;
}
SGU 114. Telecasting station 三分or找中位数的更多相关文章
- 数学 + 带权中位数 - SGU 114 Telecasting station
Telecasting station Problem's Link Mean: 百慕大的每一座城市都坐落在一维直线上,这个国家的政府决定建造一个新的广播电视台. 经过了许多次试验后,百慕大的科学家们 ...
- SGU 114.Telecasting station
题意: 百慕大的每一座城市都坐落在一维直线上.这个国家的政府决定建造一个新的广播电视台.经过了许多次试验后,百慕大的科学家们提出了一个结论,在每座城市的不满意度等于这座城市的市民数与这座城市与广播电视 ...
- SGU 114
114. Telecasting station time limit per test: 0.25 sec. memory limit per test: 4096 KB Every city in ...
- sgu114. Telecasting station 难度:1
114. Telecasting station time limit per test: 0.25 sec. memory limit per test: 4096 KB Every city in ...
- D. Salary Changing(找中位数)
题:https://codeforces.com/contest/1251/problem/D 题意:给你n个单位需要满足达到的区间,再给个s,s是要分配给n的单位的量,当然∑l<=s,问经过分 ...
- 利用数目找中位数(牛客第七场E)
https://ac.nowcoder.com/acm/contest/887/E 树状数组做法(代码有注释) #include<bits/stdc++.h> using namespac ...
- Telecasting station - SGU 114(带劝中位数)
题目大意:在一个数轴上有N个点,每个点都有一个权值,在这个数轴上找一个点,是的每个点到这个点的距离之和乘上权值的总和最小. 分析:以前也遇到过类似的问题,不过并不知道这是带权值的中位数问题,百度百科有 ...
- LeetCode Median of Two Sorted Arrays 找中位数(技巧)
题意: 给两个有序(升or降)的数组,求两个数组合并之后的中位数. 思路: 按照找第k大的思想,很巧妙.将问题的规模降低,对于每个子问题,k的规模至少减半. 考虑其中一个子问题,在两个有序数组中找第k ...
- 找中位数O(n)算法
题目描写叙述: 给定一个未排序的整数数组,找到当中位数. 中位数是排序后数组的中间值,假设数组的个数是偶数个.则返回排序后数组的第N/2个数. 例子 给出数组[4, 5, 1, 2, 3], 返回 3 ...
随机推荐
- 【nodejs】用express又做了份crud
感觉crud是高级形式的hello world了. app代码: 'use strict'; var express=require('express'); var http=require('htt ...
- 使用grep进行文本查找
命令模式: grep "文本" -rl 路径 例子: grep "w3.the.abc.com" -rl /home/hy/fluent3 有时候需要排除掉一些 ...
- 【Javascript Demo】根据Email地址跳转到相应的邮箱登录页面
我的初步想法是通过指定的邮箱地址自动查找到对应的邮箱登录页面,但是用数据库.js什么的都有局限性,因为各种各样的邮箱太多了,不能都包含的到,网上找了半天都没有找到满意的答案,自己又想不出方法,只能暂时 ...
- Oracle综合数据库管理命令集
sqlplus SANKYU/SANKYU@ORADB_192.168.25.235 cmd: exp .......(最后不要加;号)--sankyuexp SANKYU/SANKYU@SUNNY ...
- ZH奶酪:Linux/Ubuntu 安装/卸载 软件
1.安装.deb文件 以安装Chrome为例: (1)到官方网站下载Chrome浏览器相应版本,比如google-chrome-stable_current_i386.deb: (2)Ctrl+Alt ...
- 【Linux】通过SSH修改调整Linux时间和时区
VPS(Virtual Private Server 虚拟专用服务器)技术,将一部服务器分割成多个虚拟专享服务器的一种服务.大多站长喜欢用美国的VPS,而美国的时间和时区和国内不同,那就需要通过SSH ...
- Php与Erlang的Socket通信
一般来说网络通讯经常使用的方式有2种:文本通讯和二进制通讯. php与erlang之间实现文本通讯比較简单.这里就不做讨论,本文主要讨论的是php与erlang实现二进制通讯的实现方法.实现过程 ...
- iOS正則表達式(一)
什么是正則表達式? 正則表達式是对字符串操作的一种逻辑公式. 作用? 在iOS开发中我们通常使用正則表達式来匹配给定的字符串是否符合我们的业务逻辑,比方说用户注冊帐号仅仅能是手机号或者邮箱等.我们还能 ...
- 减小App包的大小
检查.ipa文件 首先获得app的ipa文件. 将ipa文件的后缀改为.zip,解压得到包内容. 查看资源文件哪个最大.然后试着对最大的文件即可处理 图片 尽量使用8-bit图片 使用8-bit的PN ...
- 触发器学习笔记(:new,:old用法)
触发器学习笔记(:new,:old用法) 触发器是数据库发生某个操作时自动运行的一类的程序 用于保持数据的完整性或记录数据库操作信息方面 触发器不能够被直接调用,只能够 ...