zoukankan      html  css  js  c++  java
  • [2019牛客多校第二场][A. Eddy Walker]

    题目链接:https://ac.nowcoder.com/acm/contest/882/A

    题目大意:圆上有(n)个点,标号从(0)到(n-1),初始一个人在点(0),每次会等概率向左或向右移动一步,如果某一时刻所有点均被访问过则停止移动,问最终停留在(m)点的概率

    题解:若(m eq 0)且(n eq 1),则(ans=frac{1}{n-1}),具体证明如下

       若设答案为(f(n,m)),可以发现这个函数有如下性质:

        1.函数是关于零点对称的,即(f(n,m)=f(n,n-m))

        2.若(m eq 0,1,n-1),则(f(n,m)=frac{f(n,m-1)+f(n,m+1)}{2}),画一下图就能知道为什么了

       接着考虑(n)的奇偶性,若(n)为奇数,则设(a=left lfloor frac{n}{2} ight floor,b=left lceil frac{n}{2} ight ceil,c=b+1)。可以发现由如上两条性质,有(f(n,a)=f(n,b)),且(f(n,b)=frac{f(n,a)+f(n,c)}{2}),因此可以得出(f(n,a)=f(n,b)=f(n,c))。以此类推则可以得出所有(f(n,m))相等,所以函数取值为(frac{1}{n-1})

       若(n)为偶数,则设(a=frac{n}{2}-1,b=frac{n}{2},c=frac{n}{2}+1),可以得出(f(n,a)=f(n,c)),且(f(n,b)=frac{f(n,a)+f(n,c)}{2}),同样可以推出(f(n,a)=f(n,b)=f(n,c)),同理可证(f(n,m)=frac{1}{n-1}(m eq 0))

       注意对(n=1)的特判即可

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define LL long long
     4 #define MOD 1000000007
     5 LL T,n,m,ans=1ll;
     6 LL qow(LL x,LL y){return y?(y&1?x*qow(x,y-1)%MOD:qow(x*x%MOD,y/2)):1;}
     7 int main()
     8 {
     9     scanf("%lld",&T);
    10     while(T--)
    11       {
    12       LL res;
    13       scanf("%lld%lld",&n,&m);
    14       if(m==0)res=n>1?0:1;
    15       else res=qow(n-1,MOD-2);
    16       ans*=res,ans%=MOD;
    17       printf("%lld
    ",ans);
    18       }
    19     return 0;
    20 }
    View Code
  • 相关阅读:
    进程的经典同步问题
    数学余数在计算机的用途
    7.货仓选址 绝对值不等式
    6. 排队打水 排序不等式
    5.合并果子 Huffman树
    4.区间覆盖 区间问题
    3.区间分组 区间问题
    2.最大不相交区间数量 区间问题
    1.区间选点 区间问题
    26.拆分-Nim游戏 博弈论
  • 原文地址:https://www.cnblogs.com/DeaphetS/p/11222816.html
Copyright © 2011-2022 走看看