2023NOIP A层联测25-游戏

有 n n n 间物理实验室,第 i i i 间实验室有 a i a_i ai个人,他们全都在打游戏。

同学 A \text{A} A 可以选择进入一间实验室,然后让其中的所有个人停止打游戏。

然后老师 B \text{B} B 可以选择进入一间实验室,然后抓住其中所有在打游戏的人。

同学 A \text{A} A 的目标是让老师 B \text{B} B 抓到的人最少,而老师的目标是抓到最多的人。

老师 B \text{B} B 在决策时无法知道同学 A \text{A} A 进入过哪个实验室。

两人均选择最优决策,问老师期望可以抓到多少人。注意两人的决策都可以是基于概率的。

也就是说,你要找到一个 m m m,使得无论老师怎么操作,总存在同学的一种方案使得被抓的人数期望 ≤ m \le m ≤m;同时无论同学怎么操作,总存在老师的一种方案使得被抓的人数期望 ≥ m \ge m ≥m。


二分答案 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\le1-\frac{mid}{a_i} pi≤1−aimid。对后者求和,如果小于 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−aimid)=m−mid∑ai1=1,得到 m i d = m − 1 ∑ 1 a i mid=\dfrac{m-1}{\sum\frac{1}{a_i}} mid=∑ai1m−1,令老师这样决策:以 1 a x ∑ 1 a i \dfrac{1}{a_x\sum\frac{1}{a_i}} ax∑ai11 的概率进入第 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(∑ai1)(1−px)ax=mid,得证。

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

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

cpp 复制代码
#include<bits/stdc++.h>
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 小时前
go游戏后端开发22:游戏房间功能
游戏·github
BingLin-Liu18 小时前
蓝桥杯备考---》贪心算法之矩阵消除游戏
算法·游戏·贪心算法
苹果企业签名分发1 天前
游戏搭建云服务器配置推荐
运维·服务器·游戏
二狗哈1 天前
go游戏后端开发20:房间消息推送处理
开发语言·游戏·golang
fatiaozhang95272 天前
晶晨S905L3A(B)-安卓9.0-开启ADB和ROOT-支持IPTV6-支持外置游戏系统-支持多种无线芯片-支持救砖-完美通刷线刷固件包
android·游戏·adb·华为·电视盒子·机顶盒rom·魔百盒固件
腾讯安全应急响应中心2 天前
命悬生死线:当游戏遭遇DDoS围剿,如何用AI破局?
网络·人工智能·游戏·ddos
徐礼昭|商派软件市场负责人3 天前
2025年消费观念转变与行为趋势全景洞察:”抽象、符号、游戏、共益、AI”重构新世代消费价值的新范式|徐礼昭
大数据·人工智能·游戏·重构·零售·中产阶级·消费洞察
CodeCaptain3 天前
[推荐了解]各类游戏引擎入门选择说明
经验分享·游戏
zzj_2626104 天前
Java课程设计(双人对战游戏)持续更新......
java·游戏·课程设计
米芝鱼4 天前
LearnOpenGL(九)自定义转换类
开发语言·c++·算法·游戏·图形渲染·shader·opengl