专栏文章

题解:CF1599C Bubble Strike

CF1599C题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioxhe70
此快照首次捕获于
2025/12/03 02:45
3 个月前
此快照最后确认于
2025/12/03 02:45
3 个月前
查看原文

思路

分类讨论。设学过的地图个数为 xx,则选到自己学过的地图的情况分为以下几类(为了方便表述,将“学过的地图”称为 A 地图,反之称为 B 地图):
  1. 随机抽到了 33 张 A 地图,概率为 (x3)(n3)\dfrac{\dbinom{x}{3}}{\dbinom{n}{3}}
  2. 随机抽到了 22 张 A 地图,此时我们可以扔去那一张 B 地图,必定可以,概率为 (x2)(nx1)(n3)\dfrac{\dbinom{x}{2}\dbinom{n-x}{1}}{\dbinom{n}{3}}
  3. 随机抽到了 11 张 A 地图,概率为 (x1)(nx2)(n3)×12\dfrac{\dbinom{x}{1}\dbinom{n-x}{2}}{\dbinom{n}{3}}\times\dfrac{1}{2}
对 3. 中 12\dfrac{1}{2} 含义的解释如下:
首先自己会选择扔去 22 张 B 地图之一,称为 X,剩下的那一张 B 地图称为 Y。我们可以将对手的选择看成是随机的,则他有 13\dfrac 1 3 的概率选中 X 扔去,然后系统有 12\dfrac12 的概率选中 A 地图;有 13\dfrac 1 3 的概率选中 Y 扔去,此时必定可以;有 13\dfrac 1 3 的概率选中 A 地图扔去,此时必定不可以。故对于某一种符合 3. 条件的地图随机抽取,选中 A 地图的概率为 13×12+13=12\dfrac13\times\dfrac12+\dfrac13=\dfrac12
由于 nn 的范围很小,故可以枚举 xx 逐一检验。

Code

CPP
#include<bits/stdc++.h>
using namespace std;
typedef long double LD;
int C3(int x){return x*(x-1)*(x-2)/6;}
int C2(int x){return x*(x-1)/2;}
int main(){
	int n;LD p;
	cin>>n>>p;
	for(int x=0;x<=n;x++)
		if(LD(C3(x)+C2(x)*(n-x)+LD(x*C2(n-x))/2)/C3(n)>=p)
			cout<<x,exit(0);
	
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...