hdu 4503 湫湫系列故事——植树节(组合概率)
2015-11-04 11:16
246 查看
这是一道求组合的题。中文题面应该能看懂,废话不多说下面来说说这道题。
可以选的总组合数是Ck3
那么选到3个人的关系都相同,要么都认识,要么都不认识。可以重反面来考虑,就是求三个人的关系不都相同。
那么对于第一个人有guanxi[1]个与他认识有k-guanxi[1]-1个与他不认识,那么符合三个人关系不都相同的种数为(k-guanxi[1]-1)*guanxi[1];
同理对于后面的人也是这样的。
最后把这些种数加起来,这里面肯定有重复的,比如A与B认识与C不识,B与C相识,计算A时的组合为ABC,计算B时的组合为0,计算C时组合为CBA,
那么就有重复了。
因为每两个人只会对应一种关系所以A与B认识,在选A时选了AB,然后再加个不认识的C,在选B时如果有BAC这个组合,那么说明C与B的关系是不识,那么当在选C时
就不可能再选到ABC这组合,如果在选C时存在ABC,说明C认识B,那么在选B时就不可能有ABC了。所以这样的话就是每个组合都重复了以次,所以总得不符合个数/2就为不符合的实际个数。
那么问题就解决了为总的组合数-实际不符合的个数。
下面看代码:
可以选的总组合数是Ck3
那么选到3个人的关系都相同,要么都认识,要么都不认识。可以重反面来考虑,就是求三个人的关系不都相同。
那么对于第一个人有guanxi[1]个与他认识有k-guanxi[1]-1个与他不认识,那么符合三个人关系不都相同的种数为(k-guanxi[1]-1)*guanxi[1];
同理对于后面的人也是这样的。
最后把这些种数加起来,这里面肯定有重复的,比如A与B认识与C不识,B与C相识,计算A时的组合为ABC,计算B时的组合为0,计算C时组合为CBA,
那么就有重复了。
因为每两个人只会对应一种关系所以A与B认识,在选A时选了AB,然后再加个不认识的C,在选B时如果有BAC这个组合,那么说明C与B的关系是不识,那么当在选C时
就不可能再选到ABC这组合,如果在选C时存在ABC,说明C认识B,那么在选B时就不可能有ABC了。所以这样的话就是每个组合都重复了以次,所以总得不符合个数/2就为不符合的实际个数。
那么问题就解决了为总的组合数-实际不符合的个数。
下面看代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> typedef long long ll; double guanxi[2000]; int main(void) { int i,j,k,p,q,n; double x,y; scanf("%d",&n); while(n--) { scanf("%d",&k); ll dd=0; for(i=0; i<k; i++) { scanf("%lf",&guanxi[i]); dd+=(k-guanxi[i]-1)*guanxi[i]; } ll x1=k*(k-1)*(k-2)/6;//总的组合数 double x2=x1-dd/2;//dd/2为实际不符合的个数。 x=1.0*x2/(1.0*x1); printf("%.3f\n",x); } return 0; }
相关文章推荐
- JS魔法堂:从void 0 === undefined说起
- rhel6和rhel7下调整 ramdisk size
- Service,BroadcastReceiver基础
- 请求转发与重定向的区别
- DMD全景照相机SDK使用文档
- sed当中使用变量替换以及执行外部命令
- sdp文件详细总结
- MYSQL 导出表结构
- Unique Paths II - LeetCode
- JVM学习笔记
- SYS_CONNECT_BY_PATH
- 致亲们的一封信
- 调用android系统本地的播放器播放本地视频或者网络视频
- shell脚本编程之条件判断,算术运算,整数测试及特殊变量
- [资料下载] 如何将接收RSSI实验数据得到距离计算公式呢?
- 我的工具集合(想起就记录下)
- 调用接口返回失败时的必要操作
- 详解shape标签
- iOS 开发,UITableViewController中手势关闭cell中的键盘。且不影响tableView中的 didSelectRowAtIndexPath 方法。
- cookie 和session 的区别详解