概率专题_概率/ 数学_基础题_ABEI
上周三讲了概率和概率dp。如果没有涉及其他综合算法,概率这种题主要是思维,先把这部分的东西写完
给个题目链接:https://vjudge.net/contest/365300#problem
HeadShoot
题目大意:玩打枪赌命游戏,已知装弹序列,且装弹和打枪的顺序同一方向,已知上一次是哑炮,打完机械会自动转一节,存活率最大,选择直接SHOOT还是ROTATE之后再射击,
思路:题目已经给了很明显的暗示,已知上一次是哑炮,说明上一次的发生的事件会影响我当前弹夹1/0表示,这是一个条件概率,
如果shoot优选,则0之后更有可能0,状态为,00,P1=00/(00+01);
如果rotate优选,则0之后再移一位更有可能为0,有 010,000,
结果并不对,是因为题目还有一句话:“you can randomly rotate the gun’s cylinder”,这个旋转是随机的,没有规定只转一节!!!读题又先入为主了。。。
所以如果rotate优选,则此时相当于求一个混乱旋转后求概率,那么上一个是不是0这个前提后面的影响,就几乎没有了,所以,P2=0/(n);
按照顺序,从头检查到成一个环(不是到尾),检查完整个长度,头可以从任意位置开始,检查0,01和00的个数,比较P1,P2,化成乘法即可
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<string>
- using namespace std;
- const string e="EQUAL",r="ROTATE",s="SHOOT";
- char a[];
- int x,y,t;
- int main () {
- memset(a,,sizeof(a));
- while(cin>>a) {
- x=;
- t=;
- int l=strlen(a);
- for(int i=; i<l; i++) {
- if(a[i]=='') {
- t++;
- int g=(i+)%l;
- if(a[g]=='') {
- x++;
- }
- }
- }
- if(x*l<t*t)cout<<r;
- if(x*l==t*t)cout<<e;
- if(x*l>t*t)cout<<s;
- puts("");
- memset(a,,sizeof(a));
- }
- return ;
- }
------
Cows and Cars
大前提:主持人开的门后面只有可能是牛。主持人相当于排除了一部分牛,那剩下的工作就是算,排除之后,总的门数,含车的门数
一定换门,所以n-1-show为剩下的总数,车的数目为一个不确定的值,因为并不知道一开始选了什么,需要分情况
- 一开始是牛,那条件是cow/n,车总数不变,还是car,写成(cow/n)*car/(n-1-show)
- 一开始是车,条件是car/n,车总数-1,car-1,写成(car/n)*(car-1)/(n-1-show)
叠加两种情况即可(贝叶斯)保证精度,先乘后除
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<string>
- using namespace std;
- double cow,car,show;
- int main() {
- while(cin>>cow>>car>>show) {
- double n=cow+car;
- printf("%.5f\n",car*(car-1.0)/n/(n-1.0-show)+cow*car/n/(n-1.0-show));
- }
- return ;
- }
Joining with Friend(坑题)
题意:你会在[t1,t2]时刻到,你朋友会在[s1,s2]时刻到,两个人都停留w,问两人碰面的概率
就是很典型的几何概率,概率统计的原题,P=相交阴影面积(交集)/总面积(并集),
一开始,打算分开两条直线讨论,分类讨论阴影面积的情形,没有普遍性,算的要死掉
结果情况实在是太多了,写又写不全,实在是难受(占个坑后面看看能不能写上)
不是只有缺小三角形的情形!!!!上面那条直线可以划到下面!!WA到吐
所以可以用 上面直线下边的面积(s1+s2)-下面直线下边的面积(s1)
- #include<cstdio>
- using namespace std;
- int t,s1,s2,t1,t2,w;
- double solve(int w) {
- if(t2+w<=s1) return ;
- if(t1+w>=s2) return (s2-s1)*(t2-t1);
- if(s1-w<=t1) { // left
- if(s2-w>=t2)//right
- return 0.5*(t1+w-s1+t2+w-s1)*(t2-t1);
- else//up
- return (s2-s1)*(t2-t1)-0.5*(s2-(t1+w))*(s2-w-t1);
- } else { //down
- if(t2+w<s2) //right
- return 0.5*(t2-(s1-w))*(t2+w-s1);
- else //up
- return 0.5*(t2-(s2-w)+t2-(s1-w))*(s2-s1);
- }
- }
- int main() {
- scanf("%d",&t);
- for(int tt=; tt<=t; tt++) {
- scanf("%lf%lf%lf%lf%lf",&s1,&s2,&t1,&t2,&w);
- double ans=solve(w)-solve(-w);
- printf("Case #%d: %.8lf\n",tt,ans/((t2-t1)*(s2-s1)));
- }
- }
Standard Deviation UVA - 10886
给定一个随机数发生器, 用以下代码实现;
- unsigned long long seed;
- long double gen() {
- static const long double Z = ( long double )1.0 / (1LL<<);
- seed >>= ;
- seed &= ( 1ULL << ) - ;
- seed *= seed;
- return seed * Z;
- }
输入seed的初始值,你的任务是求出它得到的前n个随机数标准差,保留小数点后5位(1<=n<=10000000,0<=seed<264)。
计算标准差,难点就是精度, 如果直接模拟, 用最高精度的 long double 试了一下,暴力可过
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<string>
- #include <cmath>
- using namespace std;
- typedef long long ll;
- unsigned long long seed;
- const ll M=+;
- long double gen() {
- static const long double Z = ( long double )1.0 / (1LL<<);
- seed >>= ;
- seed &= ( 1ULL << ) - ;
- seed *= seed;
- return seed * Z;
- }
- int N;
- int n;
- long double a[M];
- long double sum;
- long double ans;
- int main() {
- cin>>N;
- int k=;
- while(N--) {
- k++;
- memset(a,,sizeof(a));
- scanf("%d%llu",&n,&seed);
- sum=;
- ans=;
- for(int i=; i<=n; i++) {
- a[i]=gen();
- sum+=a[i];
- }
- sum/=n;
- for(int i=; i<=n; i++) {
- ans+=(a[i]-sum)*(a[i]-sum);
- }
- ans/=n;
- ans=sqrt(ans);
- printf("Case #%d: %.5Lf\n",k,ans);
- }
- return ;
- }
如果要优化, 关键是化简计算式子,因为如果按照先加再除的办法,肯定存不下,这个平方公式还是很明显的
分开算就可以了
概率专题_概率/ 数学_基础题_ABEI的更多相关文章
- nyoj_239:月老的难题@_@(二分图匹配基础题)
题目链接 放假回家不知道多少人被父母催着去相亲啊hhhhhhhhhhhhhh @_@ 参考:二分图的最大匹配.完美匹配和匈牙利算法 #include<bits/stdc++.h> usin ...
- BZOJ_3191_[JLOI2013]卡牌游戏_概率DP
BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- BZOJ_4872_[Shoi2017]分手是祝愿_概率与期望
BZOJ_4872_[Shoi2017]分手是祝愿_概率与期望 Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这 ...
- BZOJ_3566_[SHOI2014]概率充电器_概率+树形DP
BZOJ_3566_[SHOI2014]概率充电器_概率+树形DP Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器: “采用全新纳米级加工技 ...
- BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs
BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2 ...
- BZOJ_1406_[AHOI2007]密码箱_枚举+数学
BZOJ_1406_[AHOI2007]密码箱_枚举+数学 Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子 ...
- DP专题之概率DP
注意:在概率DP中求期望要逆着推,求概率要正着推 概率DP求期望: 链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 dp[ i ]表示从i点走到n ...
- 二、多线程基础-乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁
1.10乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将 比较-设置 ...
随机推荐
- eclipse 配置tomcat运行环境
eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上 1.打开Eclipse,单击“Window”菜单,选择下方的“Preferences”. 2.单击“Server”选项, ...
- android 练习效果(界面一)
- React Native升级
几个月前创建了一个版本为0.60.4的项目,现要更新到最新版本0.61.4. 具体可查看 https://facebook.github.io/react-native/docs/upgrading# ...
- 第八周Java实验作业
实验六 接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 掌握接口定义方法: 声明: public interface 接口名 {...} 接口体中包含常量定义和方法定义 ...
- C 2013笔试题
1.把整数分解成素数 如90=2*3*3*5 [见2015年] 方法一: int main() { int n, i=2; printf("\nInput:"); scanf(&q ...
- Unity 游戏框架:命名的力量--变量
变量的命名入门 大家先来试着理解一下这段代码: var todoList = new TodoList(); todoList.Todos = new List<Todo>(); var ...
- 贪心-最大相容区间-Maximum Number of Events That Can Be Attended
2020-02-16 16:24:19 问题描述: 问题求解: 看起来就像是sort + 贪心,但是具体如何做呢? 实际上本题是最大相容区间的变种题,在最大相容区间里,我们按照结束时间对interva ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式1
这又是一个新的开始,对象的重要性不言而喻.在JavaScript中创建对象是十分容易的,之前聊过的对象字面量和构造函数都可以达到目的.但是本篇中,我们越过那些方法,以寻求一些额外的对象创建模式. 本篇 ...
- Markdown语法快速学习
Markdown 简洁语法说明 0.前言 一直以来都是以word文档做笔记,存在很多问题,比如代码格式.高亮等.这次公司要求使用markdown,感觉眼前一亮,以前word的问题都得到了解决,而且可以 ...
- JS 剑指Offer(六) 用两个栈实现队列
题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1 分析:在队列的尾部插入 ...