码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2023NOIP A层联测25-游戏


    link

    二分答案 m i d mid mid,看学生是否能让期望被抓人数 ≤ m i d \le mid ≤mid,那么老师一定不会去抓人数 ≤ m i d \le mid ≤mid 的房间,学生只需管其他的房间。

    由于局面对于双方来说都是不确定的,学生不知道老师抓谁,老师也不知道学生进那个房间,双方都没有固定的最佳策略。

    不妨设学生有 p i p_i pi​ 的概率进入第 i i i 个房间,那么老师去抓第 i i i 个房间期望人数为 ( 1 − p i ) a i (1-p_i)a_i (1−pi​)ai​,满足 ( 1 − p i ) a i ≤ m i d (1-p_i)a_i\le mid (1−pi​)ai​≤mid,那么 p i ≥ 1 − m i d a i p_i\ge1-\frac{mid}{a_i} pi​≥1−ai​mid​。对后者求和,如果小于 1 1 1,说明学生还有余力,还能让被抓的人变小;当等于 1 1 1 时,就是答案。

    下面证明这是正确的。设有 m m m 个人数 > m i d >mid >mid 的 a i a_i ai​,如果 ∑ ( 1 − m i d a i ) = m − m i d ∑ 1 a i = 1 \sum(1-\frac{mid}{a_i})=m-mid\sum\frac{1}{a_i}=1 ∑(1−ai​mid​)=m−mid∑ai​1​=1,得到 m i d = m − 1 ∑ 1 a i mid=\dfrac{m-1}{\sum\frac{1}{a_i}} mid=∑ai​1​m−1​,令老师这样决策:以 1 a x ∑ 1 a i \dfrac{1}{a_x\sum\frac{1}{a_i}} ax​∑ai​1​1​ 的概率进入第 x x x 个房间(显然总的概率之和是等于 1 1 1 的),这样老师抓到的期望人数为 ∑ ( 1 − p x ) a x a x ( ∑ 1 a i ) = m i d \sum\dfrac{(1-p_x)a_x}{a_x(\sum\frac1{a_i})}=mid ∑ax​(∑ai​1​)(1−px​)ax​​=mid,得证。

    直接二分做就行。另外由于 m i d = m − 1 ∑ 1 a i mid=\dfrac{m-1}{\sum\frac{1}{a_i}} mid=∑ai​1​m−1​,所以可以枚举 m m m,不用二分。

    下面代码实现是二分做法。

    #include
    using namespace std;
    int n,a[100];
    bool check(double mid)
    {
        double sum=0;
        for(int i=1;i<=n;i++){
            if(a[i]>mid){
                sum+=1-mid/a[i];
            }
        }
        if(sum<1) return 0;
        return 1;
    }
    int main()
    {
        freopen("game.in","r",stdin);
        freopen("game.out","w",stdout);
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        sort(a+1,a+1+n);
        double l=0,r=100;
        while(fabs(r-l)>1e-9){
            double mid=(l+r)/2;
            if(check(mid)) l=mid;
            else r=mid;
        }
        printf("%.10lf",(l+r)/2);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    计算机中的逻辑运算详解(与、或、非、同或、异或)
    vscode常用快捷键(动图演示)
    基于分时电价策略的家庭能量系统优化附Matlab代码
    hadoop伪分布模式配置
    Hadoop3教程(二十八):(生产调优篇)NN、DN的多目录配置及磁盘间数据均衡
    宝塔自建bitwarden密码管理器
    爱上开源之golang入门至实战-第二章语言基础-作用域
    Vue2.0开发之——Vue基础用法-事件绑定$event(20)
    Java 17 新特性:switch的模式匹配(Preview)
    用 nodejs 实现 http 服务版本的 hello world
  • 原文地址:https://blog.csdn.net/dygxczn/article/details/134246266
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号