2019牛客多校第二场 A Eddy Walker(概率推公式)

传送门:https://ac.nowcoder.com/acm/contest/882/A

题意:

给你一个长度为n的环,标号从0~n-1,从0号点出发,每次向左走或者向右走的概率是相同的,问你出发后,经过n-1个点后,恰好到达点m的概率是多少,答案是一个前缀积

题解:

讨论两个点的情况:

点0->1的期望是1

讨论三个点的情况

假设我们要到点3,我们必须经过点2,然而我们到了点2可能会再回到点1再到达点3,所以我们讨论必须经过的点2的状态

倘若要按照题目要求到达点3,我们就必须到达点2,当我们到达点2后,我们有∞种方法到达点3,仔细想一想是不是这样呢?

我们可能1->2->3,1->2->1->3,1->2->1->2->3,1->2->1->2->1->3.....

所以这个数列是发散的,我们只需求得到达点2的概率,那么我到达点3的概率就一定是点2的概率,即p=1/2;

讨论四个点的情况

我们和上面一样,假设终点是4

要想按照题目的要求到达点4,我们需要经过1,2,3三个点后 再到达4

所以我们考虑到达点3的情况

我们到达点3的概率为

\(\frac{1}{4}+\frac{1}{8}+\frac{1}{16}...\)

为什么?

讨论前几项 \(p(1->2->3)=\frac{1}{4}\)

\(p(1->2->1->2->3)=\frac{1}{16}\)

\(p(1->2->3->2->3)=\frac{1}{16}\)

...

根据1->3之间路径的特点,我们发现,到点3一共有走3步,走5步,走七步...走3+k*2步的这样的情况

所以到达点3的概率可以发现是一个等比数列和

\(p(3)=\frac{1}{4}+\frac{1}{8}+\frac{1}{16}...=\frac{\frac{1}{4}*(1-\frac{1}{2^∞})}{1-\frac{1}{4}}=\frac{1}{3}\)

到这里我们发现了,我们需要找到暂态为两个点(非0)的 m-1,m+1

推出规律p=\(\frac{1}{n-1}\)

代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<stack>
  5. #include<queue>
  6. #include<map>
  7. #include<set>
  8. #include<cstdio>
  9. #include<cstring>
  10. #include<cmath>
  11. #include<ctime>
  12. #define fuck(x) cerr<<#x<<" = "<<x<<endl;
  13. #define debug(a, x) cerr<<#a<<"["<<x<<"] = "<<a[x]<<endl;
  14. #define ls (t<<1)
  15. #define rs ((t<<1)|1)
  16. using namespace std;
  17. typedef long long ll;
  18. typedef unsigned long long ull;
  19. const int maxn = 100086;
  20. const int maxm = 100086;
  21. const int inf = 0x3f3f3f3f;
  22. const ll Inf = 999999999999999999;
  23. const int mod = 1000000007;
  24. const double eps = 1e-6;
  25. const double pi = acos(-1);
  26. ll quick_pow(ll a,ll b){
  27. ll ans=1;
  28. while(b){
  29. if(b&1){ans*=a;ans%=mod;}
  30. a*=a;a%=mod;
  31. b>>=1;
  32. }
  33. return ans;
  34. }
  35. int main() {
  36. // ios::sync_with_stdio(false);
  37. // freopen("in.txt", "r", stdin);
  38. int T;
  39. scanf("%d",&T);
  40. ll ans=1;
  41. while (T--){
  42. ll a,b;
  43. scanf("%lld%lld",&a,&b);
  44. if(a==1){
  45. ans*=1;
  46. }else if(b==0){
  47. ans=0;
  48. }else{
  49. ans*=quick_pow(a-1,mod-2);
  50. ans%=mod;
  51. }
  52. printf("%lld\n",ans);
  53. }
  54. return 0;
  55. }

2019牛客多校第二场 A Eddy Walker(概率推公式)的更多相关文章

  1. [2019牛客多校第二场][A. Eddy Walker]

    题目链接:https://ac.nowcoder.com/acm/contest/882/A 题目大意:圆上有\(n\)个点,标号从\(0\)到\(n-1\),初始一个人在点\(0\),每次会等概率向 ...

  2. 2019牛客多校第二场H-Second Large Rectangle

    Second Large Rectangle 题目传送门 解题思路 先求出每个点上的高,再利用单调栈分别求出每个点左右两边第一个高小于自己的位置,从而而得出最后一个大于等于自己的位置,进而求出自己的位 ...

  3. [2019牛客多校第二场][G. Polygons]

    题目链接:https://ac.nowcoder.com/acm/contest/882/G 题目大意:有\(n\)条直线将平面分成若干个区域,要求处理\(m\)次询问:求第\(q\)大的区域面积.保 ...

  4. 2019 牛客多校第二场 H Second Large Rectangle

    题目链接:https://ac.nowcoder.com/acm/contest/882/H 题目大意 给定一个 n * m 的 01 矩阵,求其中第二大的子矩阵,子矩阵元素必须全部为 1.输出其大小 ...

  5. 2019牛客多校第二场H题(悬线法)

    把以前的题补补,用悬线求面积第二大的子矩形.我们先求出最大子矩阵的面积,并记录其行三个方向上的悬线长度.然后排除这个矩形,记得还得特判少一行或者少一列的情况 #include <bits/std ...

  6. 2019牛客多校第二场D-Kth Minimum Clique

    Kth Minimum Clique 题目传送门 解题思路 我们可以从没有点开始,把点一个一个放进去,先把放入一个点的情况都存进按照权值排序的优先队列,每次在新出队的集合里增加一个新的点,为了避免重复 ...

  7. 2019牛客多校第二场F-Partition problem(搜索+剪枝)

    Partition problem 题目传送门 解题思路 假设当前两队的对抗值为s,如果把红队中的一个人a分配到白队,s+= a对红队中所有人的对抗值,s-= a对白队中所有人的对抗值.所以我们可以先 ...

  8. 2019牛客多校第二场BEddy Walker 2——BM递推

    题意 从数字 $0$ 除法,每次向前走 $i$ 步,$i$ 是 $1 \sim K$ 中等概率随机的一个数,也就是说概率都是 $\frac{1}{K}$.求落在过数字 $N$ 额概率,$N=-1$ 表 ...

  9. [2019牛客多校第二场][E. MAZE]

    题目链接:https://ac.nowcoder.com/acm/contest/882/E 题目大意:有一个\(n\times m\)的01矩阵,一开始可以从第一行的一个点出发,每次可以向左.向右. ...

随机推荐

  1. Mybatis中输出映射resultType与resultMap的区别

    Mybatis中输出映射resultType与resultMap的区别 (原文地址:http://blog.csdn.net/acmman/article/details/46509375) 一.re ...

  2. UVA_10300:Ecological Premium

    Sample Input 351 1 12 2 23 3 32 3 48 9 239 1 86 12 18 1 1310 30 409 8 5100 1000 70Sample Output 3886 ...

  3. Libevent:4event loop

    一:运行loop       一旦一些events在event_base注册之后(下一节会讨论如何创建和注册events),就可以使Libevent等待events,并且在events准备好时能够通知 ...

  4. margin负边距的使用(超简单)

    写在开头: 在css的世界中,一切都是框,所有的框都处于流动的状态 margin负边距可以使文档流发生偏移   在没有设置margin-bottom的时候,parent的高度会跟随child的内部元素 ...

  5. Cython保护Python代码

    注:.pyc也有一定的保护性,容易被反编译出源码... 项目发布时,为防止源码泄露,需要对源码进行一定的保护机制,本文使用Cython将.py文件转为.so进行保护.这一方法,虽仍能被反编译,但难度会 ...

  6. mysql的root密码忘记解决方

    mysql的root密码忘记解决方 没关注第一步,直接从第二步开始,(可以参看上一篇,先停止mysql服务).然后从第二步开始. 我启动mysql用的命令是/etc/init.d/mysql  sta ...

  7. Hadoop入门进阶步步高(三)-配置Hadoop

    三.配置Hadoop 1.设置$HADOOP_HOME/conf/hadoop-env.sh 这个文件里设置的是Hadoop运行时须要的环境变量,在1.2.1版中共同拥有19个环境变量.例如以下:   ...

  8. SprinfJdbcTemplate+SpringMVC 代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件)

    代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件) 原文地址: http://jilongliang.iteye.com/blog/2262070 p ...

  9. oracle函数 CHR(n1)

    [功能]:将ASCII 码转换为字符. [参数]:n1,为0 ~ 255,整数 [返回]:字符型 [示例] SQL> select chr(54740) zhao,chr(65) chr65 f ...

  10. Python基础10 回顾

    从最初的"Hello World",走到面向对象,该回过头来看看,教程中是否遗漏了什么. 我们之前提到一句话,"Everything is Object".那么 ...