首页 > 其他分享 >RC-u3 骰子游戏

RC-u3 骰子游戏

时间:2024-05-31 20:45:32浏览次数:31  
标签:骰子 return int u3 mu && RC 点数

睿抗2023本科第三题

// 包含C++标准库,用于各种通用功能,如输入输出和排序
#include<bits/stdc++.h>
using namespace std;

// 全局变量声明
int n,k[6],level1,level2,t[6],f[32],r[32];

// 函数get_level:根据五个骰子的点数,返回当前获胜等级
int get_level(int s[])
{
    // 首先对骰子点数进行排序,以便于后续判断
    sort(s+1,s+1+5);
    // 下面的条件判断对应于题目中给出的获胜等级判断逻辑
    // 注意数组是从1开始索引的,符合题目输入习惯
    if(s[1]==s[2]&&s[2]==s[3]&&s[3]==s[4]&&s[4]==s[5])
        return 9; // 五个同点数
    if(s[1]==s[2]&&s[2]==s[3]&&s[3]==s[4]||s[2]==s[3]&&s[3]==s[4]&&s[4]==s[5])
        return 8; // 四个同点数
    if(s[1]==s[2]&&s[2]!=s[3]&&s[3]==s[4]&&s[4]==s[5]||s[1]==s[2]&&s[2]==s[3]&&s[3]!=s[4]&&s[4]==s[5])
        return 7; // 葫芦
    if(s[1]==2&&s[2]==3&&s[3]==4&&s[4]==5&&s[5]==6)
        return 6; // 六高顺子
    if(s[1]==1&&s[2]==2&&s[3]==3&&s[4]==4&&s[5]==5)
        return 5; // 五高顺子
    if(s[1]==s[2]&&s[2]==s[3]||s[2]&&s[2]==s[3]&&s[3]==s[4]||s[3]==s[4]&&s[4]==s[5])
        return 4; // 三个同点数
    if(s[1]==s[2]&&s[3]==s[4]||s[1]==s[2]&&s[4]==s[5]||s[2]==s[3]&&s[4]==s[5])
        return 3; // 两对
    for(int i=2;i<=5;i++)
        if(s[i]==s[i-1])
            return 2; // 一对
    return 1; // 无
}

// 函数get_1:计算一个整数的二进制表示中1的个数
int get_1(int a)
{
    int sum=0;
    while(a)
    {
        if(a%2==1) sum++;
        a/=2;
    }
    return sum;
}

// 主函数
int main()
{
    // 读入测试数据组数
    cin>>n;
    while(n--)
    {
        // 读入每组数据,即五个骰子的点数
        for(int i=1;i<=5;i++)
            cin>>k[i];
        // 获取初始获胜等级
        level1=get_level(k);
        // 初始化数组f和r
        memset(f,0,sizeof f);
        memset(r,0,sizeof r);
        // 初始化结果变量
        int res=0;
        int zi=0;
        int mu=1;
        double gv=-1;
        // 遍历所有可能的骰子点数组合
        for(int a=1;a<=6;a++)
            for(int b=1;b<=6;b++)
                for(int c=1;c<=6;c++)
                    for(int d=1;d<=6;d++)
                        for(int e=1;e<=6;e++)
                        {
                            // 计算每种点数组合
                            t[1]=a,t[2]=b,t[3]=c,t[4]=d,t[5]=e;
                            int cnt=0;
                            // 标记与原点数不同的骰子位置
                            for(int i=1;i<=5;i++)
                                if(k[i]!=t[i])
                                    cnt|=1<<(i-1);
                            // 计算所有包含该点数变化的组合,并更新频次和成功次数
                            for(int i=1;i<=31;i++)
                                if((i&cnt)==cnt)
                                {
                                    f[i]++;
                                    level2=get_level(t);
                                    if(level2>level1)
                                        r[i]++;
                                }
                        }
        // 寻找使得获胜等级提高的最佳操作方案
        for(int i=1;i<=31;i++)
        {
            if(r[i]==0) continue;
            double g=(double)r[i]/f[i];
            int c=get_1(i);
            // 如果发现更好的操作方案,则更新结果变量
            if(g>gv||(g==gv&&c<res))
                gv=g,res=c,zi=r[i],mu=f[i];
        }
        // 简化结果分数
        if(zi>0&&mu>0)
        {
            int z=__gcd(zi,mu);
            zi/=z;
            mu/=z;
        }
        // 输出结果
        printf("%d %d %d\n",res,zi,mu);
    }
    return 0;
}

可得记住咯————

标签:骰子,return,int,u3,mu,&&,RC,点数
From: https://www.cnblogs.com/2401377187PandZ/p/18225249

相关文章

  • 一个生动的例子——通过ERC20接口访问Tether合约
    生动的例子USDT:符合ERC20标准的美元稳定币,Tether合约获得测试网上Tether合约地址通过自己写的ERC20接口访问这个合约Tether合约地址:0xdAC17F958D2ee523a2206206994597C13D831ec7IERC20.sol//SPDX-License-Identifier:GPL-3.0pragmasolidity>=0.8.2<0.9.0;inter......
  • strcpy()和memcpy()的区别
    strcpy()和memcpy()的区别strcpy()和memcpy()都是用来复制内存中的数据,但它们之间有一些重要的区别:strcpy():主要用于复制字符串数据。它会从源字符串的起始位置开始复制字符,直到遇到字符串结束符0为止。因此,strcpy()适合用于复制以0结尾的字符串。memcpy():用于复制一段内存......
  • archlinux安装yay和微信
    1.增加archlinuxcn源,编辑/etc/pacman.conf文件,在最后添加如下内容:[archlinuxcn]Server=https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch2.设置在本地信任farseerfc的GPGkey:sudopacman-key--lsign-key"[email protected]"3.安装archlinuxcn-keyring......
  • pytorch实现线性回归
    转自:https://www.cnblogs.com/miraclepbc/p/14329186.html导入相关python包importtorchimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromtorchimportnn%matplotlibinline加载数据data=pd.read_csv('E:/datasets/dataset/Income1.csv�......
  • 面试专区|【69道Elasticsearch高频题整理(附答案背诵版)】
    简述什么是Elasticsearch?Elasticsearch是一个基于Lucene的搜索服务器,它提供了一个分布式、多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。它用于云计算中,能够达到实时......
  • PHP 使用 ZipArchive 解压避免乱码
    $filePath:压缩包路径../123.zip$path:要解压的目录../unzip/publicfunctionnewUnzip($filePath,$path){$zip=new\ZipArchive();if($zip->open($filePath)===true){//创建要解压的目录//获取解压的文件数组......
  • Educational Codeforces Round 166 (Rated for Div. 2)
    目录写在前面ABCD写在最后写在前面比赛地址:https://codeforces.com/contest/1976满课,并且48小时之内只睡了8h。本来不想打的,但是手痒就上小号打了,然而唐唐唐掉大分呃呃A签到。感谢isdigit函数。///*By:Luckyblock*/#include<bits/stdc++.h>#defineLLlonglon......
  • 美团多场景多任务学习论文《HiNet: Novel Multi-Scenario & Multi-Task Learning with
    模型结构模型主要包含场景抽取层和任务抽取层(上图A):场景抽取层场景抽取层主要包括了场景共享专家(Scenario-sharedexpert)模块、当前场景特有专家(Scenario-specificexpert)模块以及场景感知注意力网络,通过这三部分的信息抽取,最终形成了场景层次的信息表征场景共享专家就是一......
  • Cesium 中 GeoJsonDataSource 贴地不生效的问题
    Cesium中GeoJsonDataSource可以设置clampToGround为true来确保其贴地,但有时会出现不生效的情况。可能有以下几个原因:数据源不是地理坐标系(WGS84):如果数据源不是基于WGS84坐标系的,则可能无法正确地将图形贴到地球表面。确保你的数据源使用正确的坐标系。数据源中的图形高......
  • 安装并运行pytorch报错“核心已转储”
    1问题和解决概要主机环境:Ubuntu20.04,RTX3090,GPUDriverVersion525.89.02问题:用anaconda创建虚拟环境python3.10,安装pytorch2.2.2-cu118和对应torchvision后,训练模型出现报错:“核心已转储”。定位和解决:查阅资料,确认driver支持cuda-11.8,主机安装cuda-11.8后编译一个sample......