牛客某竞赛--二分--交叉乘

复习好C++,有时候一般的解法,C++更快

一 掷硬币

牛牛最近很喜欢掷硬币,由于他今天很无聊,所以他在家掷了n次硬币,如果这n次硬币全部朝上或者全部朝下牛牛就很开心,请问牛牛开心的概率是多少。(每次掷硬币朝上的概率与朝下的概率相同)

class Solution:
    def Probability(self , n ):
        # write code here
        if n <= 20:
            return "%.2f" % (2 ** (1 - n)+0.001)
        else:
            return "0.00"

本题"%.2f"可以提供四舍五入,但是比如0.125,得到的仍然是0.12,在5的情况编译器并没有入!!所以需要加上0.001!!
在这里插入图片描述

二 交叉乘

在这里插入图片描述

在这里插入图片描述
举例: r=1, l=5:总和就是 (a[1]a[2]+a[1]a[3]+a[1]a[4]+a[1]a[5])+ (a[2]a[3]+a[2]a[4]+a[2]a[5]) + …
==(pow((a[1] + a[2]+a[3]+a[4]+a[5]) , 2) - (a[1]**2 … + a[5]**2))//2

在这里插入图片描述

class Solution:  # 考虑到后面还要重复算的问题,先把逻辑事先搭好。
    def getSum(self , a , query ):
        # write code here
        out = []
        n = len(a)
        presum = (n+1) * [0]
        presqure = (n+1) * [0]
        for i in range(n):
            presum[i+1] = presum[i] + a[i]
            presqure[i+1] = presqure[i] + a[i]*a[i]
        ans = [0] * (len(query)//2)
        for i in range(0, len(query), 2):
            l, r = query[i], query[i+1]
            result = ((pow((presum[r] - presum[l-1]),2) -(presqure[r]-presqure[l-1]))//2) % 1000000007
            out.append(result)
        return out

三 玩偶摆放

在这里插入图片描述
思路 二分: 在有序数组中找到一个适合的位置插入。
输入:5,3,[[0,2],[4,7],[9,9]] 输出 2
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值