UESTC 1610 黑红梅方

地主AI算法实现 斗地主AI算法实现 一(拆牌)               by   wojiushi3344                QQ: 513670524                                  转载请说明出处                    源代码下载                   ps: 前面已经写了几篇地主游戏的基本算法实现,今天来讲讲单机地 阅读详情

题目链接:http://acm.uestc.edu.cn/#/problem/show/1610
解法:
卿式扑克序列?
出现一组有连续4张牌均不同的序列
不好计算,怎么办?
可以计算出没有一组连续4张牌均不同的情况,用总情况减去没有一组连续4张牌均不同的情况
我们来看 三张牌排成一排有哪些情况?
三张牌均相同 AAA dp1
前两张牌相同,第三张牌不同 AAB dp2
第一和第三张牌相同,第二张牌不同 ABA dp3
后两张牌相同,第一张牌不同 BAA dp4
三张牌均不相同 ABC dp5
我们设dpx[i]为前i张牌最后三张牌为第x种类型且不出现一组连续4张牌均不同的情况
可得以下方程:
dp1[i]=dp1[i-1]+dp4[i-1]
dp2[i]=3*dp1[i-1]+3*dp4[i-1]
dp3[i]=dp2[i-1]+dp3[i-1]+dp5[i-1]
dp4[i]=dp2[i-1]+dp3[i-1]+dp5[i-1]
dp5[i]=2*dp2[i-1]+2*dp3[i-1]+dp5[i-1]
初始值:dp1[3]=4 dp2[3]=12 dp3[3]=12 dp4[3]=12 dp5[3]=24
N=10^18 逗我呢?

矩阵快速幂!

(dp1[i],dp2[i],dp3[i],dp4[i],dp5[i])=(dp1[i-1],dp2[i-1],dp3[i-1],dp4[i-1],dp5[i-1])*

1001030030011010110102201

B(N)=B(3)*A^(N-3)
Matrix multiply(Matrix a,Matrix b) {}
void quickmat(long long k)
{
while(k)
{
if (k & 1) {res=multiply(res,origin);}
k>>=1;
origin=multiply(origin,origin);
}
}
res=dp1[n]+dp2[n]+dp3[n]+dp4[n]+dp5[n]
用普通快速幂算出4^n=tot,本题所求的答案ans=tot-res;注意取模的问题
算法复杂度:O(log N)

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 1e9+9;
LL powmod(LL a, LL n)
{
    LL res=1;
    while(n){
        if(n&1) res=(res%mod*a%mod)%mod;
        a=(a%mod*a%mod)%mod;
        n>>=1;
    }
    return res;
}
struct Matrix{
    LL a[5][5];
    void init(){
        memset(a,0,sizeof(a));
    }
    void init2(){
        memset(a,0,sizeof(a));
        for(int i=0; i<5; i++) a[i][i]=1;
    }
};
Matrix operator * (Matrix a, Matrix b){
    Matrix res;
    res.init();
    for(int i=0; i<5; i++){
        for(int j=0; j<5; j++){
            for(int k=0;k<5; k++){
                res.a[i][j]=(res.a[i][j]+(a.a[i][k]*b.a[k][j])%mod)%mod;
            }
        }
    }
    return res;
}
Matrix ksm(Matrix a, LL n){
    Matrix res;
    res.init2();
    while(n){
        if(n&1) res=res*a;
        a=a*a;
        n>>=1;
    }
    return res;
}
int main()
{
    LL n;
    scanf("%lld",&n);
    Matrix A,B;
    A.init();
    B.init();
    A.a[0][0]=1,A.a[0][1]=3,A.a[1][2]=1,A.a[1][3]=1,A.a[1][4]=2;
    A.a[2][2]=1;A.a[2][3]=1;A.a[2][4]=2;
    A.a[3][0]=1;A.a[3][1]=3;
    A.a[4][2]=1;A.a[4][3]=1;A.a[4][4]=1;
    B.a[0][0]=4;B.a[0][1]=12;B.a[0][2]=12;B.a[0][3]=12;B.a[0][4]=24;
    Matrix ans=ksm(A,n-3);
//    for(int i=0; i<5; i++){
//        for(int j=0; j<5; j++){
//            printf("%d ",ans.a[i][j]);
//        }
//        printf("\n");
//    }
    ans=B*ans;
//    for(int i=0; i<5; i++){
//        for(int j=0; j<5; j++){
//            printf("%d ",ans.a[i][j]);
//        }
//        printf("\n");
//    }
    LL ret = 0;
    for(int i=0; i<5; i++){
        ret=(ret+ans.a[0][i])%mod;
    }
    ret = (powmod(4,n)-ret+mod)%mod;
    if(ret<0) ret+=mod;
    printf("%lld\n", ret);
    return 0;
}
UESTC的ACM题目推荐 一份UESTC的ACM题目推荐,可以当作入门题来切 立即下载

相关推荐

网络游戏源码demo(版本15)

一个网络游戏的demo代码,包含客户端(c++)和服务端(python), 这个是版本15。 增加了小地图 其他版本及开发记录,见博客 http://blog.youkuaiyun.com/changjixiong

UESTC ACM训练题一(总结)

C-最大公约数与最小公倍数(Problem ID 1890 数学) Note 用辗转相除法求最大公约数之后即可求出最小公倍数。 Code #include <cstdio> using namespace std; int gcd(int a,int b) { if(b) while((a%=b)&&(b%=a)); return a+b; } int main() { int T,a,b,p,q; scanf("%d",&T);

weixin_42370876的博客 2546

一个扑克牌网络游戏的C++源代码

游戏名称为“五十K”,积分扑克牌游戏,三人两副牌玩,最后谁得的分最多就谁赢(只有5 10 K为分)。牌的大小比较(类似斗地主):8张牌点一样>7张牌点一样>...>5张牌点一样>纯五十K(指只含五十K三张牌,且花色一样)>4张牌点一样>杂五十K(指只含五十K三张牌,且花色不一样)>3张牌点一样、两张牌点一样、单张(这三类彼此平级),张数一样的按点数大小比较,纯五十K之间按黑红梅方比较,杂五十K都一样大。手上有管的住别人的牌不能不管。别人都管不住你的牌,你就将出下的牌的分得到。

c语言设计黑红梅方四种图案,8h9btf

AutoCAD 快捷键大全(一)字母类 1、对象特性 ADC, *ADCENTER(设计中心“Ctrl+2”) CH, MO *PROPERTIES(修改特性“Ctrl+1”) MA, *MATCHPROP(属性匹配) ST, *STYLE(文字样式) <BR< p> COL, *COLOR(设置颜色) LA, *LAYER(图层操作) LT, *LINETYPE(线形) LTS...

weixin_29793001的博客 772

java扑克游戏 源码

java扑克游戏 源码

用Python+PyTorch实现DQN无人机避障:从环境搭建到实战训练(附完整代码)

本文详细介绍了如何使用Python和PyTorch框架,基于深度强化学习中的DQN算法,实现一个无人机自主避障系统。内容涵盖从自定义环境搭建、DQN智能体核心算法实现,到完整的训练流程与超参数调优,并提供了可视化演示与进阶优化方向,为开发者提供了从理论到实践的完整指南。

kubernetes8ctl的博客 640

UESTC1610 黑红梅方

题意:一行有n个扑克牌,每一个扑克牌有四种颜色,问有几种扑克牌,满足连续四个不相等 题解:状态压缩+递推+矩阵快速幂,不过状态很多,不能直接写,这里分为5种状态 #include <bits/stdc++.h> #define maxn 5 const long long mod = (1e9+9); using namespace std; struct mat{ ...

weixin_30708329的博客 121

医学图像分割评价指标详解:从Dice到MSD的实战解析

本文深入解析医学图像分割的核心评价指标,从最常用的Dice相似系数到衡量边界精度的MSD(最大对称表面距离),通过实战案例与代码演示,系统阐述各指标的计算原理、应用场景及临床意义,帮助读者全面评估模型性能。

weixin_29070721的博客 593

破解黑红梅方提前知道保单机里的答案

现在市面上保单机一般就是热敏和激光打印机,激光也简称*射打印机,一般适用与,五星宏辉,单挑王,超级金三色,,彩金宏辉,富家乐 等等打保单的保单 机, 热敏打印机的原理是热敏打印机的工作原理是打印头上安装有半导体加热元件,打印头加热并接触热敏打印纸后就可以打印出需要的图 案,其原理与热敏式传真机...

chongdan5547的博客 4821

手机刷双系统

刷机教程(https://www.geekeyes.cn/forum.php/forum.php?mod=viewthread&amp;tid=492) 解锁教程(http://www.gioov.com/index.php/1386)   解锁教程 cmd下 进入adb目录( 如果环境变量配置了adb 可以直接在cmd 下输入命令) 手机连接电脑,确保usb 调试打开,然后手机连接电脑,...

超宇的博客 1万+

阿里云Ubuntu部署Steam饥荒联机版服务器:从零到多人联机的完整指南

本文详细介绍了在阿里云Ubuntu系统上部署Steam饥荒联机版服务器的完整流程,包括环境准备、SteamCMD安装、服务端配置、Mod管理及后台运行技巧。通过2核4GB的ECS实例配置和端口设置,实现5人流畅联机体验,适合游戏爱好者快速搭建专属服务器。

weixin_29229261的博客 1024

acm括号配对问题c语言,ACM:UESTC - 649 括号配对问题 - stack

/*/简单的括号配对问题先把给出的数字串全部变成括号串,在用栈去压入括号,每次保存栈顶括号,如果栈顶括号能和下一个括号配对,就把栈顶弹出,指括号的指针后移。最后判断栈内是否还有元素,如果有,就说明配对不成功。AC代码:/*/#include"algorithm"#include"iostream"#include"cstring"#include"cstdlib"#include"cstdio"#...

weixin_32784349的博客 163

逆概率加权法(Inverse Probability Weighting, IPW)的原理及R实现

逆概率加权(IPW)是一种用于解释由于非随机选择观测值或人群信息的非随机缺失而造成的缺失和选择偏差的方法。原理:这种方法可以通过对观察值的加权来修正分析,使其具有被选中的概率。IPW是基于这样一个假设,即整个研究人群都有可以预测纳入概率(非遗漏)的个体信息,因此,在考虑到这些信息后,我们可以仅从非遗漏的观察值开始对整个目标人群进行推断。计算的程序如下:首先,我们考虑整个研究人群,用逻辑回归模型计算非失访信息的概率,其中响应是非失访,协变量是其可能的预测因素。每个受试者的权重是由预测概率的倒数给出的。然后使用

Christina 5万+

简易扑克牌游戏JAVA源码_新手上路

下面来看看具体代码的实现:一、entity包1.裁判类package entity; /** * 裁判 * @author Geek * @version 1.0 * @date 2018年6月22日 上午9:38:47 * @TextDemo 简易poker游戏 * @copyright * @remark */ import java.util.List; publ...

the blog of Lee 6382

某验SVG图标验证码识别思路(非训练)

本文提出了一种无需训练的某验SVG图标验证码识别方法。通过分析SVG文件结构,使用正则表达式提取静态图标数据,并借助CairoSVG库转换为PNG格式。随后采用坐标定位方式裁剪出12个固定位置的图标,最后利用ResNet50提取特征,通过余弦相似度匹配目标图标。该方法避免了训练目标检测模型,实现了高效准确的验证码识别。关键步骤包括SVG文件预处理、图标定位裁剪和基于预训练模型的相似度比对。

九月镇灵将的博客 419

回声消除AEC初探

那段保留即可——在播放期间把麦克风关闭(软件层面的 mute),同样能根除回声,只是会失去“一句话期间仍能捕获背景噪声”的能力。如果还有更细节的需求(比如多语言 TTS、实时流式 ASR),欢迎继续交流。的完整示例,可直接拷贝、改造、集成到你现有的 LLM‑TTS 对话系统中。实际效果取决于用户设备的硬件与驱动,若仍有回声,可让用户佩戴。把扬声器信号(把播放音频拷贝给 AEC)从麦克风流中减去。:TTS 播放的声音被同一个麦克风再次捕获,导致声学回声。三种实现示例,帮助你快速落地。,几乎可以消除所有回声。

NLP与推荐算法 571

2018 UESTC ACM Summer Training Team Selection (3) (赛后补题)

2018 UESTC ACM Summer Training Team Selection (3) 由于自己水平有限,补题补的都是感觉应该能做出来的题目。(包括水过去的和没做出来的)由样例我们可以发现,9可以以为基础被拆分成3^2、3^1、3^0,这三种情况综合起来的总次数就是答案。动规方程为dp[n][k](k表示最大的数不超过m^k),dp[n][k]=dp[n][k-1]+dp[n-m^k]...

mxYlulu的博客 479

声音源定位:利用YOLO与麦克风阵列定位声音来源YOLOv5、YOLOv8、YOLOv10

YOLO(You Only Look Once)是一个用于目标检测的深度学习模型。YOLO的最大特点是其通过一次前向传播即可完成多个目标的检测,速度和精度相对其他目标检测算法具有显著优势。YOLO模型的版本不断更新,从YOLOv1到YOLOv10,算法精度和速度都有了显著的提升。声音源定位是利用多个麦克风阵列收集的声音信号,通过算法计算声音源的位置。声音源定位的关键在于准确估计每个麦克风的声音到达时间,从而确定声音源的空间坐标。基于时延估计(TDOA)

YOLO 673

UESTC 1651 Uestc的命运之旅

题目链接:http://acm.uestc.edu.cn/#/problem/show/1651 题意: 为了迎接本科的评教工作,Uestc迎来了很多专家。 为了Uestc的荣誉,我们当然是想尽可能多的增加专家的好感度。 然而,Uestc并不是完美无暇的,所以现在我们需要给专家们规划出一条最能增加好感度的路线。 但是最近大家都比较忙,所以你的辅导员将这个艰巨的工作交给了你的室友。Uestc可

I good vegetable a! 665

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python_斗地主发牌程序

  1)1副牌(52+2=54张) 2)有大小王,用提供的国王和皇后的符号表示大小王 3)54张牌发给3个玩家,每人17张牌,并有3张底牌。 4)输出3个玩家的牌,按照由小到大,黑红梅方的顺序。 5)输出3张底牌 5)输出每个玩家有几个炸弹(4张面值一样的牌,或者大小王在一起,为一个炸弹。) ''' 注:斗地主发牌程序 Player_Num:      代表玩家数目       ...

咚咚怪的博客 3086

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

同学如何开始ACM?推荐阅读UESTC的文章

新的征程?       在第一次听到ACM这个名词之后,或许你心中还有各种疑惑?什么是ACM?搞ACM到底要学什么?ACM究竟是什么样子?ACM适合我吗?在回答这些问题之前,我希望你以ACM为关键字进行搜索,然后自行获取信息。 在问任何问题之前,先问搜索引擎。 这是一条黄金法则,不管你搞不搞ACM,它都会让你受益很长一段时间(以后也许会有更好的信息获取手段)。 狭义上说,ACM

梦想起航的地方 1819

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

记录一道题,这里是个盲点

A.for循环的话,很灵活,但是代码不够简洁. B.System.arraycopy()源码。可以看到是native方法:native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。 可以将native方法比作Java程序同C程序的接口。 如果是复制一个一位数组,那么改变复制后的数组并不影响原数组。但是如果复制一个二维数组...

q_all_is_well的博客 256

UOJ 73 [WC2015]未来程序

提交答案题program1 :答案就是 a * b % c ,需要高精度,直接python.program2 :矩阵乘法.program3 :推一下幂和公式即可.program4 :第一个任务套个公式 n*(n-1).第二个任务直接BFS一下就好了.program5 :找全黑块.因为附近肯定有一些白点,所以只要把附近扫一下即可.program6 :floyd判圈,找循环节.program7 :显然就

无尽 2075
上一篇: UESTC 1608 暑假集训
下一篇: UESTC 1690 这是一道比CCCC简单题难的简单题
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值