UVA 10883 - Supermean(组合数学+数值优化)

题目链接:10883 - Supermean

题意:求超级平均数,就是相邻两个算一个平均数,直到剩下一个数,求数值。

思路:画图很容易推断出公式。就拿最后一组样例来说

1     2      3      4      5

1.5  2.5   3.5   4.5

2       3      4

2.5   3.5

3

观察可以发现都是从顶到底,看又几条路线,就有几次,然后最后每个数字在除上相应次数的2,那几条路线就是C(n - 1, [0 - n - 1])的组合数。

所以ans = sum{C(n - 1, i) * a[i] / 2^(n - 1)}

然后由于n很大,直接算会悲剧的。

所以每一项都先取log值,最后在次方乘回去,那么每一项为

log(C(n - 1, i) * a[i] / 2^(n - 1)) = log(C(n - 1, i)) + log(a[i]) - (n - 1) * log(2);

最后再利用exp函数计算回去,从而求出总和即可

代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
#define min(a,b) ((a)<(b)?(a):(b))
const int N = 50005;
int t, n;
double a, c;

double cal(int i, double a) {
	return c + log(a) - (n - 1) * log(2);
}

int main() {
	int cas = 0;
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		double sum = 0;
		c = 0;
		for (int i = 0; i < n; i++) {
			scanf("%lf", &a);
			if (a < 0) sum -= exp(cal(i, -a));
			else sum += exp(cal(i, a));
			c = c + log(n - i - 1) - log(i + 1);
		}
		printf("Case #%d: %.3lf\n", ++cas, sum);
	}
	return 0;
}

UVA 10883 - Supermean(组合数学+数值优化),布布扣,bubuko.com

时间: 2024-11-19 00:06:19

UVA 10883 - Supermean(组合数学+数值优化)的相关文章

uva 10883 - Supermean(组合数学+数值优化)

题目链接:uva 10883 - Supermean 题目大意:给出n个数,每相邻两个数求平均数,将得到n-1个数,这n-1个数每相邻的两个数求平均值,将得到n-2个数.一次类推,求最后得到的那个数的值. 解题思路:类似与杨辉三角,第i个数起始被加了C(n?1i?1)次.总共有2n?1个数相加.但是因为n有50000,250000根本存不下,所以借助log函数. 例: 中间的2可以通过蓝色和红色两条路径影响最后的答案. #include <cstdio> #include <cstrin

UVA - 10883 Supermean

Description Problem F Supermean Time Limit: 2 second "I have not failed. I've just found 10,000 ways that won't work." Thomas Edison Do you know how to compute the mean (or average) of n numbers? Well, that's not good enough for me. I want the s

UVA 10883 Supermean 上下取对数防溢出

题目链接:点击打开链接 溢出了半天,觉累不爱 #include<math.h> #include<iostream> #include<stdio.h> using namespace std; #define ll int int main(){ ll Cas= 1, T; cin>>T; while(T--){ ll n; cin>>n; double sum = 0, a; double hehe = 0; for(ll i = 0; i

数值优化(Numerical Optimization)学习系列-文件夹

概述 数值优化对于最优化问题提供了一种迭代算法思路,通过迭代逐渐接近最优解,分别对无约束最优化问题和带约束最优化问题进行求解. 该系列教程能够參考的资料有 1. <Numerical Optimization 2nd>–Jorge Nocedal Stephen J. Wright 2. <凸优化>–Stephen Boyd 3. <非线性最优化基础>–Masao Fukushima(林贵华译) 4. <非线性最优化理论与方法>–王宜举 5. 凸优化在线课程

Uva 11609 - Team ( 组合数学 + 二项式性质 + 快速幂取模 )

Uva 11609 - Team ( 组合数学 + 二项式性质 + 快速幂取模 ) 题意: 有N个人,选一个或多个人参加比赛,其中一名当队长,有多少种方案? (如果参赛者完全相同但是队长不同,也算是一种情况) [ 1<=n <= 10^9 ] 分析: 这题要用到组合式公式的性质 转化之后快速幂取模轻松搞定之 代码: //Uva 11609 - Team /* 组合数公式 + 二项式系数性质 + 快速幂 手动自己推 -> F[n] = C(n,1)*1 + C(n,2)*2 + C(n,n

uva 10537 Toll! Revisited(优先队列优化dijstra及变形)

Toll! Revisited 大致题意:有两种节点,一种是大写字母,一种是小写字母.首先输入m条边,当经过小写字母时需要付一单位的过路费,当经过大写字母时,要付当前财务的1/20做过路费.问在起点最少需要带多少物品使到达终点时还有k个物品.当有多条符合条件的路径时输出字典序最小的一个. 思路:已知终点的权值,那么可以从终点向前推.求终点到起点的最短路径,然后按字典序打印路径. 比较难处理的是:向前推时前驱节点的权值计算.列个方程算算就可以了,主要时不能整除的情况. 计算前驱结点dis值的时候,

【数值优化】基础

"数值"优化:设置算法时,要考虑舍入误差. 数值优化问题分类: 无约束优化  VS 约束优化 线性规划.目标函数和约束函数都是线性的 二次规划.目标函数为二次的,约束函数为线性. 凸优化.目标函数为凸的,约束函数为线性的. 局部解 VS 全局解 连续   VS  离散 确定  VS  随机 无约束优化问题基础 解的一阶必要条件: 解的二阶必要条件: 解的二阶充分条件: 迭代算法(如何构造下一个迭代点).终止条件 一阶.二阶.直接算法 直接算法无需使用导数,一阶算法需要使用一阶导数,二阶

数值优化:计算基本理论

1. 优化问题 最一般的优化问题的表述是这样的: 求解等式约束 $\boldsymbol{g}(\boldsymbol{x})=0$ 和不等式约束 $\boldsymbol{h}(\boldsymbol{x})\leq 0$ 下使得取得 $\min f(\boldsymbol{x})$ 的解 $\boldsymbol{x}$ 其中 $f:\mathbb{R}^n\Rightarrow \mathbb{R}$,$\boldsymbol{g}:\mathbb{R}^n\Rightarrow \mat

UVa 10003 (可用四边形不等式优化) Cutting Sticks

题意: 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用. 分析: d(i, j)表示切割第i个切点到第j个切点这段所需的最小费用.则有d(i, j) = min{d(i, k) + d(k, j)} + a[j] - a[i]; ( i < k < j ) 最后一项是第一刀的费用. 时间复杂度为O(n3) 最后还要注意一下输出格式中整数后面还要加一个句点. 1 //#define LOCAL 2 #include <iostream>