【u003】计算概率
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
小明有n个长度不一的小木棍,这些木棍的长度都是正整数。小明的父亲想和小明做一个游戏。他规定一个整数长度l,让小明闭着眼睛从n个木棍中随便拿出两个。如果两个木棍的长度总和小于等于l,则小明胜,否则小明的父亲胜。小明想知道他胜出的概率究竟有多大。
【输入格式】
输入包含两行。第一行为两个整数n和l,其中n和l都不超过100000。第二行包含n个整数,分别为n个木棍的长度。
【输出格式】
输出包含一个实数,小明胜出的概率,保留两位小数。
Sample Input
4 5
1 2 3 4
Sample Output
0.67
【题解】
输入的数据有一些是没有用的。
比如出现了一个数字大于等于l。
则无论它和另外哪一种木棍组合都没办法组合出小于等于l的。
所以可以舍弃掉。
对于那些小于l的木棍。
开一个数组num[1..l]记录它们的个数。
然后用s累加前j种数字的总个数。
然后k=l-j;
对于j∈1..l/2;
ans+= s*num[k];
注意s会随j的累加逐渐变大。
这是因为k可以和j累加变成l正好。也可以和小于j的数字组合成小于l的长度。
最后累加的s还有用。
ans+=C(s,2);
设两根木棒长度为x1,x2;
我们处理的第一种情况是x1<l/2<x2;
然后C(s,2)则表示x1<x2<=l/2;
可以预见x1,x2不能同时大于l/2;
然后n要用__int64类,不然n*(n-1)的时候可能会溢出。
不区别组合出的长度小于等于l的情况的总数是C(n,2);
所以最后求概率的时候除C(n,2)即可。
C(n,2)=n*(n-1)/2;
【代码】
/*
输入的数据有一些是没有用的。
比如出现了一个数字大于等于l。
则无论它和另外哪一种木棍组合都没办法组合出小于等于l的。
所以可以舍弃掉。
对于那些小于l的木棍。
开一个数组num[1..l]记录它们的个数。
然后用s累加前j种数字的总个数。
然后k=l-j;
对于j∈1..l/2;
ans+= s*num[k];
注意s会随j的累加逐渐变大。
这是因为k可以和j累加变成l正好。也可以和小于j的数字组合成小于l的长度。
最后累加的s还有用。
ans+=C(s,2);
设两根木棒长度为x1,x2;
我们处理的第一种情况是x1<l/2<x2;
然后C(s,2)则表示x1<x2<=l/2;
可以预见x1,x2不能同时大于l/2;
*/
#include <cstdio> int num[100001] = { 0 };//记录长度小于l的木棍各有多少根。
__int64 n, l;//用__int64.防止溢出 void input_data(); void get_ans(); int main()
{
input_data();
get_ans();
return 0;
} void get_ans()
{
int j = 1, k = l - 1;//j+k==l始终成立
double s =0, ans = 0;
while (k > j)//如果k是大于j的。
{
s += num[j];//累加前j种数字的总个数。
ans += num[k] * s;//k可以和1..j组合成小于等于l的长度
k--;//一直往中间靠。
j++;//直到k<=l/2为止
}
if (k == j) //k==j的情况 比如j=1,然后l=4.则l-1等于3.j++,k--后j==2;
s += num[j];//而2<=l/2所以归为第二类。即C(S,2);
ans += s*(s - 1)/2.0;//获取第二类的方案数
ans = ans / (n*(n - 1) / 2.0);//总数是C(n,2);
printf("%.2lf", ans);//保留两位输出。
} void input_data()
{
scanf("%I64d%I64d", &n, &l);
for (int i = 1; i <= n; i++)//输入n个数字
{
int x;
scanf("%d", &x);//记录长度小于l的木棍x的个数。
if (x < l)
num[x]++;
}
}
【u003】计算概率的更多相关文章
- 蓝桥杯 第三届C/C++预赛真题(9) 夺冠概率(手工计算概率)
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表: 甲 乙 丙 丁 甲 - 0.1 0.3 0.5乙 ...
- mysql 查询随机条记录的sql语句和php计算概率
最近在网上找了下mysql查询随机的几个sql,我把最终的记录下来. SELECT * FROM uchome_mtag AS a JOIN (SELECT MAX(tagid) AS id FROM ...
- 一个mapreduce得到需要计算单词概率的基础数据
第一步,先计算需要计算概率的词频,单词种类数,类别单词总数(类别均是按照文件夹名区分)(基础数据以及分词了,每个单词一行,以及预处理好) package org.lukey.hadoop.classi ...
- 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)
1. tf.matmul(X, w) # 进行点乘操作 参数说明:X,w都表示输入的数据, 2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False 参 ...
- jquery抽奖插件+概率计算
写了一个抽奖的jquery插件和计算概率的方法, 结合起来就是一个简单的概率抽奖, 不过实际项目中基本不会把抽奖概率的计算放在前端处理~. demo lottery.jquery.js $.fn.ex ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- Chapter 1: 随机事件及其概率
1. 随机试验,样本点,样本空间 若试验具有下列特点: 在相同条件下可重复进行 每次试验的可能结果不止一个,且所有可能结果在实验前是已知的 实验前不能确定哪一个结果会发生 则称该试验为随机试验,常记为 ...
- POJ 3156 - Interconnect (概率DP+hash)
题意:给一个图,有些点之间已经连边,现在给每对点之间加边的概率是相同的,问使得整个图连通,加边条数的期望是多少. 此题可以用概率DP+并查集+hash来做. 用dp(i,j,k...)表示当前的每个联 ...
- 【强连通分量+概率】Bzoj2438 杀人游戏
Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...
随机推荐
- 转一篇对EJB理解的文章
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
- pycharm 注册 License server方式
在输入框输入以下内容即可:http://idea.yangyusb.com
- Xcode6:No architectures to compile for(ONLY_ACTIVE_ARCH=YES...)
1.问题描写叙述 Xcode6真机測试旧project,不能执行,报错例如以下: 2.解决方式 问题非常明显,当前的执行模式设置了ONLY_ACTIVE_ARCH为Yes,当时的project的Val ...
- C#string转换为Datetime
DateTime.ParseExact("0710090000", "MMddHHmmss", CultureInfo.CurrentCulture, Date ...
- ORA-16009 remote archive log destination must be a STANDBY database
ORA-16009错误处理 问题描述: 主备在做Switchover切换时,在切换后的备库报如下错误: Wed Jul 22 04:49:02 2015 Errors in file /u01/app ...
- HDU1969 Pie(二分搜索)
题目大意是要办生日Party,有n个馅饼,有f个朋友.接下来是n个馅饼的半径.然后是分馅饼了, 注意咯自己也要,大家都要一样大,形状没什么要求,但都要是一整块的那种,也就是说不能从两个饼中 各割一小块 ...
- 使用 LaTeX 绘制 PGM(Probabilistic Graphical Models)中的贝叶斯网络(bayesian networks)
Software for drawing bayesian networks (graphical models) 这里需要调用 latex 中的绘图库:TikZ and PGF. 注意,下述 tex ...
- css页面滚动条出现时防止页面跳动的方法
大家写页面时应该都遇到过一个问题,尤其是写单页面应用的时候, 在有滚动条页面和没有滚动条页面之间相互跳转时, 你页面的主体内容会向左或者向右抖一下,让强迫症看了很不舒服. 现在就来解救一下强迫症: 方 ...
- 【Codeforces Round #301 (Div. 2) A】 Combination Lock
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟水题 [代码] #include <bits/stdc++.h> using namespace std; cons ...
- msys 中打开系统程序
按照msys 后发现sh自带的vim不好用,下载安装了个gvim,在etc/profile中作如下设置: alias gvim="D:/Program\ Files/Vim/vim73/gv ...