当前位置: 首页 > article >正文

蓝桥杯 2024 国 B【选数概率】(AC)

题目描述

一个数组中有 a a a 1 1 1 b b b 2 2 2 c c c 3 3 3。设 P i , j P_{i,j} Pi,j 表示在数组中随机选取两个数,其中一个数为 i i i,另一个数为 j j j 的概率。比如 P 1 , 2 = a b C ( a + b + c , 2 ) P_{1,2} = \dfrac{ab}{C(a+b+c,2)} P1,2=C(a+b+c,2)ab,其中 C ( N , M ) C(N, M) C(N,M) 为组合数,表示从 N N N 个不同元素中任取 M M M 个的方案数。

a = ? , b = ? , c = ? a=\text{?},b=\text{?},c=\text{?} a=?,b=?,c=? 时,满足 P 1 , 2 = 517 2091 , P 2 , 3 = 2632 10455 , P 1 , 3 = 308 2091 P_{1,2}=\dfrac{517}{2091},P_{2,3}=\dfrac{2632}{10455},P_{1,3}=\dfrac{308}{2091} P1,2=2091517,P2,3=104552632,P1,3=2091308,且 a + b + c a + b + c a+b+c 最小。保证 a + b + c a + b + c a+b+c 最小的解是唯一的。

你需要提交一个格式为 a , b , c a,b,c a,b,c 的字符串。例如假设你计算的结果是 a = 12 , b = 34 , c = 56 a =12, b = 34, c = 56 a=12,b=34,c=56,那么你需要提交的字符串是 12,34,56

输入格式

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

输出格式

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

解题思路

已知 P 1 , 2 = a b C ( a + b + c , 2 ) P_{1,2} = \dfrac {ab}{C(a + b + c, 2)} P1,2=C(a+b+c,2)ab,那么 P 1 , 3 = a c C ( a + b + c , 2 ) P_{1,3} = \dfrac {ac}{C(a + b + c, 2)} P1,3=C(a+b+c,2)ac P 2 , 3 = b c C ( a + b + c , 2 ) P_{2,3} = \dfrac {bc}{C(a + b + c, 2)} P2,3=C(a+b+c,2)bc

我们知道 C n m = n ! m ! ⋅ ( n − m ) ! C_n^m = \dfrac {n!}{m! \cdot (n-m)!} Cnm=m!(nm)!n!,那么 C n 2 = n ! 2 ! ⋅ ( n − 2 ) ! = n × ( n − 1 ) 2 C_n^2=\dfrac {n!}{2! \cdot (n-2)!}=\dfrac{n \times (n - 1)}{2} Cn2=2!(n2)!n!=2n×(n1)

那么接下来,我们只需要去枚举 a , b , c a, b, c a,b,c 即可得出答案。

AC_Code

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;

int calc(int x)
{
    return x * (x - 1) / 2;
}

bool equal(int x1, int y1, int x2, int y2)
{
    int t = x1 / x2;
    if (x1 % x2)
        return false;
    return t * y2 == y1;
}

int main()
{
    for (int i = 1; i <= 200; ++ i )
        for (int j = 1; j <= 200; ++ j )
            for (int k = 1; k <= 200; ++ k )
                if (equal(i * j, calc(i + j + k), 517, 2091))
                    if (equal(j * k, calc(i + j + k), 2632, 10455))
                        if (equal(i * k, calc(i + j + k), 308, 2091))
                            cout << i << ',' << j << ',' << k << endl;
    return 0;
}

http://www.kler.cn/a/447472.html

相关文章:

  • Spring整合Redis基本操作步骤
  • 强基计划之编程:开启科研精英培养新路径
  • go面试问题
  • (OCPP服务器)SteVe编译搭建全过程
  • 阿里云虚拟主机ecs镜像如何转移到本地virtualbox上
  • 【Maven】dependencyManagement依赖版本管理
  • 【java面向对象编程】第六弹----封装、继承、多态
  • Androidstudio点击按钮播放声音
  • 如何优雅的关闭GoWeb服务器
  • RK3588 , mpp硬编码yuv, 保存MP4视频文件.
  • TDesign:NavBar 导航栏
  • 未来趋势系列 篇五:自主可控科技题材解析和股票梳理
  • SpringCloud微服务开发(六)ElasticSearch/RESTful风格
  • 如何在Qt中应用html美化控件
  • 进入 Cosmic Red:第十周游戏指南
  • Linux中的mv命令深入分析
  • RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
  • 如何深入学习JVM底层原理?
  • 火山引擎声音复刻API-2.0
  • 【从零开始入门unity游戏开发之——C#篇18】C#面向对象的封装——构造函数、`this()`构造函数链、析构函数(方法)
  • 如果模块请求http改为了https,测试方案应该如何制定,修改
  • 云手机:小红书矩阵搭建方案
  • 电商新品发布自动化:RPA 确保信息一致性与及时性【rap.top】
  • WPF制作图片闪烁的自定义控件
  • 科研篇——《吕达仁:科研真问题从何而来》
  • volatility2工具的使用vol2工具篇