https://vjudge.net/problem/UVA-10883 题意: 给出n个数,每相邻两个数求平均数,依次类推,最后得到1个数,求该数. 思路: 演算一下可以发现最后各个数的系数就是二项式系数. 但是n太大,直接计算会溢出. 所以,这里要用对数计算.(cmath中的log默认以e为底) #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #inclu…
在纸上演算一下就能看出答案是:sum{ C(n-1, i) * a[i] / 2^(n-1) | 0 ≤ i ≤ n-1 } 组合数可以通过递推计算:C(n, k) = C(n, k-1) * (n-k-1) / k 但是n太大了,直接计算组合数会爆double的.所以计算的时候要取一下对数就行了,组合数对数的递推相应就变成了log_C(n, k) = log_C(n, k-1) + log(n-k-1) - log(k) #include <cstdio> #include <cmat…
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…
Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差.但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了. Sun的J2SE提供了一个单一的Java对数方法——double java.lang.Math.log(double),这很轻易使用.请看如下代码: double x = Math.log(5); 等价于:x = ln 5 或 x = loge5,即以e为底的自然对数. 假如你想使用Java来计算机对数,算底不同的对数又该如何做呢?很遗憾,我们还…
题目链接:https://vjudge.net/problem/UVA-12298 题意: 1.超级扑克,每种花色有无数张牌,但是,这些牌都是合数:比如黑桃:4,6,8,9,10,,,, 2.现在拿走了一些牌: 3.从每种花色里面抽取一张牌,和为 n ,有多少种方案: 4.现在 和 n 是一个区间,a到b; 分析: 四种花色,每种取一张,有多少种方案? 和 为 n ,即 将4个多项式乘起来,指数为 n ,就得到了和为 N 的一种方案,那么方案种数就是他的系数: 将这些多项式相乘使用FFT 模板是…
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=45  SCUD Busters  Background Some problems are difficult to solve but have a simplification that is easy to solve. Rather than…
设置最后打开的是盒子1, 另外一个盒子剩下i个 那么在这之前打开了n + n - i次盒子 那么这个时候的概率是C(2 * n - i, n) p ^ (n+1) (1-p)^ (n - i) 那么反过来最后打开的是盒子2, 那么概率是C(2 * n - i, n) p ^ (n-i) (1-p)^ (n +1) 那么当前的概率就是两个加起来,然后乘以权值,即i就可以了 所以枚举所有的i加起来就好了. 但这样会损失很多精度, 所以我们可以用对数 也就是说算的时候先取对数来算,后来再取回去 不要忘…
网上一个能用的也没有,自己写一个把. 1.计算原理:  整数部分 网上找到了一个c语言的计算方法如下: int flog2(float x) { return ((unsigned&)x>>23&255)-127; } 用matlab测试了一下,得到的结果是一个log2的整数部分 小数部分 发现小数部分其实都是  1+一个小数  ,然后这个小数值其实可通过最高位是0.5 然后0.25,0.125.......这样累加得到. 比如: 100 0000 0000 0000 0000…
题意: 求[n, m]之间包含0的数字的个数题解:转化为求solve(n) - solve(m-1)的前缀问题 对于求0到n的解,我们举例 n = 25789 对于8这位,让其为0对答案的贡献是 (0~257)*(0~9) 假设是 n = 25709 那么让这位为0的答案贡献是 (0~256) * (0~9) + (257)* (0~9) //meek///#include<bits/stdc++.h> #include <cstdio> #include <cmath>…
https://vjudge.net/problem/UVA-11488 题意: 给定一个字符串集合S,定义P(s)为所有字符串的公共前缀长度与S中字符串个数的乘积.比如P( {000, 001, 0011} ) = 6.给n个01串,从中选择一个集合S,使得P(S)最大. 思路: 建立字典树,边插入边统计答案即可. 用两个变量分别记录前缀数量和前缀长度,每次插入时动态更新两者乘积. #include<iostream> #include<cstdio> #include<c…