PLEASE

PLEASE

https://ac.nowcoder.com/acm/problem/111563

题意:
有这么一个游戏,有三个杯子,每次可以使用中间的杯子与二边的交换,求n次交换后中间杯子还是原来那个的概率为多少?

思路:
设原来杯子用1表示,其余二个杯子用0表示:010为初始状况
第一次出现状态为:100、001
第二次出现状态为:100、010、010、001
第三次出现状态为:100、010、100、001、100、001、010、001
每一个状态可以演化成两个状态,所以第n次的总状态数为图片说明
由于010只由100、001一比一演化出,所以设图片说明 (当前次的010状态数等于上一次的总状态数减去上一次的010状态数)
第n次概率:图片说明
用高中知识去掉右边表达式的常数:
图片说明
设:图片说明
所以:图片说明
图片说明
代回去得:
图片说明
最后n为奇数为:
图片说明
最后n为偶数为:
图片说明
我们发现分子一定为奇数,所以不会有2的因子,所以只需要考虑分子能不能被3整除,带几个n进去发现可以都整除3。
所以分子需要将分母的3除去。

参考:
https://blog.nowcoder.net/n/3d7a321601c845d5bfb99f469f5405c4
https://blog.nowcoder.net/n/fc44ba68be8444a7b6c4189f2b253457

代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll inf=1e9+7;
const int N=200005;

ll qpow(ll n, ll m)
{
    ll s=1;
    while(m)
    {
        if(m&1)
        {
            s=s*n%inf;
        }
        n=n*n%inf;
        m=m/2;
    }
    return s;
}

int main()
{
    int k;
    scanf("%d",&k);
    ll p=2;
    int flag=1;
    for(int i=0;i<k;i++)
    {
        ll a;
        scanf("%lld",&a);
        p=qpow(p,a);
        if(a%2==0)
        {
            flag=0;
        }
    }
    p=p*qpow(2LL,inf-2)%inf;
    ll ki=qpow(3LL,inf-2);
    if(flag)
    {
        printf("%lld/%lld\n",(p-1+inf)%inf*ki%inf,p);
    }
    else
    {
        printf("%lld/%lld\n",(p+1)%inf*ki%inf,p);
    }
    return 0;
}
每日一题题解 文章被收录于专栏

写题解

全部评论

相关推荐

会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务