UVa 131 - The Psychic Poker Player

【数据结构】汉诺塔问题(丰富图解) 经典汉诺塔问题,丰富图解,助你理解。 阅读详情

一手牌(规则请见:http://dpk888.com/school/discussions/%E4%B8%80%E6%89%8B%E7%89%8C%E7%9A%84%E7%89%8C%E5%9E%8B-poker-hands#per_page=10),枚举 + 模拟,关键是明白其桌子上的牌相当于一个栈,只有丢掉手里相应数量的牌才可以从栈中依次抽出相应数量的牌来维持手里始终有五张牌,依此枚举。

代码如下:

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;

int poker_cmp(const void *a, const void *b)
{
    return strcmp((char *)a,(char *)b);
}
int ff, flag[11];
char a[6][3], b[11][3];
char s[9][20] = {"highest-card", "one-pair", "two-pairs", "three-of-a-kind",
                 "straight", "flush", "full-house", "four-of-a-kind", "straight-flush"
                };
int judge_flush() // 判断 同花
{
    int i;
    for(i = 0; i < 4; i++)
        if(a[i][1] != a[i + 1][1])
            return 0;
    return 1;
}
int judge_straight() // 判断 顺子
{
    if(a[0][0] == '1' && a[1][0] == ':' && a[2][0] == ';' && a[3][0] == '<' && a[4][0] == '=') // 注意特殊情况的判定,原因请见规则
        return 1;
    for(int i = 0; i < 4; i++)
        if(a[i][0] != a[i + 1][0] - 1)
            return 0;
    return 1;
}
int judge_kind_4() // 判断 四条
{
    int i;
    for(i = 0; i < 3; i++)
        if(a[i][0] != a[i + 1][0])
            break;
    if(i == 3)
        return 1;
    for(i = 1; i < 4; i++)
        if(a[i][0] != a[i + 1][0])
            return 0;
    return 1;
}
int judge_full_house() // 判断 葫芦
{
    if(a[0][0] == a[1][0] && a[1][0] == a[2][0] && a[3][0] == a[4][0])
        return 1;
    if(a[0][0] == a[1][0] && a[2][0] == a[3][0] && a[3][0] == a[4][0])
        return 1;
    return 0;
}
int judge_kind_3()// 判断 三条
{
    if(a[0][0] == a[1][0] && a[1][0] == a[2][0] )
        return 1;
    if(a[1][0] == a[2][0] && a[2][0] == a[3][0] )
        return 1;
    if(a[2][0] == a[3][0] && a[3][0] == a[4][0] )
        return 1;
    return 0;
}
int judge_two_pairs() // 判断 两对
{
    if(a[0][0] == a[1][0] && a[2][0] == a[3][0] )
        return 1;
    if(a[0][0] == a[1][0] && a[3][0] == a[4][0] )
        return 1;
    if(a[1][0] == a[2][0] && a[3][0] == a[4][0] )
        return 1;
    return 0;
}
int judge_pair() // 判断 一对
{
    for(int i = 0; i < 4; i++)
        if(a[i][0] == a[i + 1][0])
            return 1;
    return 0;
}
int solve()
{
    int flush = judge_flush();
    int straight = judge_straight();
    if(flush && straight)
        return 8;
    int kind_4 = judge_kind_4();
    if(kind_4)
        return 7;
    int full_house = judge_full_house();
    if(full_house)
        return 6;
    if(flush)
        return 5;
    if(straight)
        return 4;
    int kind_3 = judge_kind_3();
    if(kind_3)
        return 3;
    int two_pairs = judge_two_pairs();
    if(two_pairs)
        return 2;
    int pair = judge_pair();
    if(pair)
        return 1;
    return 0;
}
int subset_2()
{
    int ct = 0, f;
    for(int i = 0; i < 10; i++)
        if(flag[i])
            strcpy(a[ct++], b[i]);
        else if(ct == 5)
            break;
    qsort(a, 5, sizeof(a[0]), poker_cmp);
    f = solve();
    if(f > ff)
        ff = f;
    return ff;
}
int subset() // 枚举子集
{
    int fi[5];
    for(fi[0] = 0; fi[0] < 10; fi[0]++)
        for(fi[1] = fi[0] + 1; fi[1] < 10; fi[1]++)
            if(fi[0] != fi[1])
                for(fi[2] = fi[1] + 1; fi[2] < 10; fi[2]++)
                    if(fi[0] != fi[2] && fi[1] != fi[2])
                        for(fi[3] = fi[2] + 1; fi[3] < 10; fi[3]++)
                            if(fi[0] != fi[3] && fi[1] != fi[3] && fi[2] != fi[3])
                                for(fi[4] = fi[3] + 1; fi[4] < 10; fi[4]++)
                                    if(fi[0] != fi[4] && fi[1] != fi[4] && fi[2] != fi[4] && fi[3] != fi[4])
                                    {
                                        int fct = 0;
                                        for(int i = 0; i < 5; i++)
                                            if(fi[i] < 5)
                                                ++fct;
                                        if(fi[4] >= 10 - fct) // 保证只有丢掉相应数量的手牌才可以从桌子上抽取相应数量的牌
                                            break;
                                        memset(flag, 0, sizeof(flag));
                                        flag[fi[0]] = 1;
                                        flag[fi[1]] = 1;
                                        flag[fi[2]] = 1;
                                        flag[fi[3]] = 1;
                                        flag[fi[4]] = 1;
                                        int f = subset_2();
                                        if(f == 8)
                                            return 8;
                                    }
    return 0;
}
int main()
{
#ifdef test
    freopen("in.txt", "r", stdin);
#endif
    char str[50];
    while(gets(str) != NULL)
    {
        for(int i = 0; i < 10; i++)
            sscanf(str + 3 * i, "%[^ ]",b[i]);
        printf("Hand: ");
        for(int i = 0; i < 5; i++)
            printf("%s ", b[i]);
        printf("Deck: ");
        for(int i = 5; i < 10; i++)
            printf("%s ", b[i]);
        printf("Best hand: ");
        for(int i = 0; i < 10; i++) // 为了判断方便,可以将‘A’‘T’‘J’‘Q’‘K’转化为‘1’‘:’‘“’‘<’‘=',其ASCll码依次增加
            if(b[i][0] == 'A')
                b[i][0] = '1';
            else if(b[i][0] == 'T')
                b[i][0] = ':';
            else if(b[i][0] == 'J')
                b[i][0] = ';';
            else if(b[i][0] == 'Q')
                b[i][0] = '<';
            else if(b[i][0] == 'K')
                b[i][0] = '=';
        ff = 0;
        subset();
        printf("%s\n", s[ff]);
    }
    return 0;
}


构网型逆变器下垂控制与电流限幅策略研究:理论、仿真与代码实现 随着分布式发电和微电网技术的快速发展,构网型(Grid-Forming, GFM)逆变器因其能够自主建立电压和频率参考、支撑弱电网及孤岛运行而受到广泛关注。本文提出并实现了一种基于下垂控制的构网型逆变器控制策略,将逆变器等效为受控电压源,通过L型滤波器接入配电网。在公共耦合点(PCC)处实时测量三相电压和电流,计算有功和无功功率,进而采用P-w和Q-V下垂控制生成内部频率和电压幅值,合成三相参考电压。针对故障情况下过电流问题,设计了一种自适应电流限幅模块:当电流幅值超过设定上限时,动态降低电压参考系数k_s 阅读详情

相关推荐

基于stm32的数控恒压恒流电源设计方案

基于stm32的数控恒压恒流电源设计方案 基于stm32的数控恒压恒流电源设计方案 不包实物,可自己动手制作,可代做 本设计采用220V市电输入工频变压器,将220V交流电压降为24V交流电压,经过全桥整流加电容滤波,输出约32V直流电压.可调输出电压方案采用线性稳压调整器方案,即运放处于比较调整状态,运放输出驱动P型MOS管,电压输出端由电阻分压反馈至运放同相输入端,运放反相输入端由STM32单片机控制TLC5615数模转换器输入模拟电压,根据运放构成比较器原理,运放的同相端和反相端始终趋向于电压相等的特

m0_72265581的博客 7222

UVa 131 The Psychic Poker Player

本文介绍了一个扑克牌游戏问题,玩家初始获得5张手牌,可通过丢弃0-5张牌并用牌堆顶部的牌替换来优化牌型。题目假设玩家能预知牌堆顶部的5张牌。解题思路是枚举所有可能的换牌方案(共32种),并对每种方案评估牌型价值。关键点包括:换牌规则、枚举策略(暴力搜索)、牌型判断顺序(从同花顺到高牌共9种)。代码实现通过回溯法生成所有换牌组合,调用牌型判断函数确定最优解。该算法能高效找到最佳换牌策略,使最终手牌价值最大化。

寂静山林 688

Windows/Linux双平台指南:3种方法快速释放被占用的GPU内存(含任务管理器替代方案)

本文详细介绍了在Windows和Linux双平台下快速释放被占用GPU内存的3种方法,包括任务管理器替代方案。从基础操作到高阶技巧,帮助用户彻底解决GPU内存驻留问题,提升计算资源利用率。特别适用于深度学习开发者和服务器管理员处理显存泄漏等常见问题。

j0k1l2m3n的博客 262

uva-131 - The Psychic Poker Player

The Psychic Poker Player  In 5-card draw poker, a player is dealt a hand of five cards (which may be looked at). The player may then discard between zero and five of his or her cards and ha

写东西的地方 797

查看电脑mac地址+主机名+用户名并导出

张三:李四,应公司要求,今天下班前必须将这张表格里面用户电脑的mac地址统计出来!李四:我该怎么办呢?一个一个查看,太没有效率了吧!对了,我可以做一个bat脚本啊!

拥抱着青春 1974

LLC混合滞回控制 vs 电压模/电流模:UCC25640x仿真对比与选型指南

在开关电源设计中,LLC谐振变换器的环路补偿是核心难点。传统电压模控制(VMC)和电流模控制(CMC)在LLC拓扑上存在环路增益漂移、动态响应慢等局限。混合滞回控制通过滞回比较器直接调制开关频率,并融合输出电压与谐振腔电流信息,实现了自适应环路增益和快速瞬态响应。该技术显著提升轻载效率与动态性能,适用于高密度适配器、快充及车载充电机等场景。本文基于UCC25640x系列,通过仿真对比三种控制策略,为工程选型与调试提供实践参考。

weixin_33925615的博客 334

uva 131 The Psychic Poker Player

思路挺简单的,就是判断手牌的类型比较麻烦一点,核心思想是枚举手牌子集,然后把桌上的牌的上面的某几张牌和手牌子集中的牌凑足5张,所有的情况里面最优的组合就是最后的答案,注意子集为空集的时候的特殊情况。 #include #include #include struct node { int value; char color; }; bool operator > (struct

皓首不倦 不负少年 744

Python 爬虫实战:全球渔业船舶捕捞记录数据采集与分析全攻略

通过本项目,我们实现了对全球渔业船舶捕捞记录数据的采集、处理和可视化,为渔业资源管理和海洋生态保护提供了数据支持。未来,可以进一步结合机器学习和深度学习技术,对捕捞行为进行预测和分类,提高对非法捕捞活动的识别能力。

2201_76125261的博客 557

uva 131 - The Psychic Poker Player

参考题解  原题  子集生成的问题。用增量构造法。需要先弄清楚规则。特殊的顺子有两种,TJQKA和A2345。 #include #include #include using namespace std; const int maxn=15; char *sf="A23456789TJQK"; char *su="CDHS"; char str[9][20]={"straight-f

LeanCloud-lzwjava 969

手把手教你学Simulink--控制策略与算法的DC-DC变换器领域仿真领域建模实例:基于Simulink实现一个双闭环控制Buck变换器的仿真建模

目录主要步骤1. 前期准备2. 构建Buck变换器模型3. 定义双闭环控制器4. 设置参考电压和反馈回路5. 实现双闭环控制器逻辑6. 仿真参数设置7. 运行仿真与结果分析示例整合代码片段1. Simulink模型2. 双闭环控制器参数调节3. 仿真结果分析总结双闭环控制是一种常见的控制策略,广泛应用于电力电子系统(如DC-DC变换器)中。它通过内外两个环路的协同工作,分别控制系统的动态性能和稳态性能。对于Buck变换器,通常采用电流内环和电压外环的双闭环控制结构。以下是一个手把手教程,帮助你基于Simul

MHD0815的博客 325

学Simulink——基于大数据处理与云计算的场景实例:无人机与云计算中心之间的高效数据传输链路设计

本文以无人机与云计算中心的高效数据传输链路设计为例,手把手指导使用Simulink进行系统级建模。针对智慧城市、灾害监测等场景中无人机采集的海量数据(视频、图像、点云等),构建包含数据源、传输协议、无线链路、云接入和性能分析的五层架构模型。通过智能数据压缩、多链路聚合和QoS优先级调度等关键技术,实现5G+Wi-Fi等多通信技术的自适应切换。仿真结果表明,5G+Wi-Fi链路聚合在城市环境中表现最优,而4G+卫星组合适合偏远地区。该模型为无人机实时数据传输提供了有效的设计方法和优化方向,可拓展至边缘计算、A

xiaoheshang_123的博客 120

UVA 131 The Psychic Poker Player

UVA 131 The Psychic Poker Player题目大意:手牌五张 排堆五张,超能力者可以看到这10张牌,可以弃掉x张牌摸x张牌,问能凑出的最大的牌 比较规则 比较规则如下:(按优先级排序)1.straight-flush:同花顺,牌面为T(10) - A2.four-of-a-kind:四条,牌面有4个相同的值;3.full-house:牌面有3个相同值,剩下2个也相同值;4.

ZeroLH00的博客 435

第 13 章:Spring AI Alibaba MCP 与 Nacos3 — 企业级MCP服务

理解Spring AI Alibaba 框架下的MCP服务与Nacos注册中心整合的必要性,学会Spring AI Alibaba-基于Nacos的MCP实现方法

paopao_wu的专栏 788

UVA131 HDU1629 The Psychic Poker Player【暴力】

The Psychic Poker Player Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 255 Accepted Submission(s): 49 Problem Description In 5-card draw p...

海岛Blog 725

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UVA 131 The Psychic Poker Player

UVA-131题意:给出 5 张手牌和 5 张备用牌。可以任意丢弃手上的 k 张牌,并从备用牌上方抽 k 张补充。求手上能达到的最大牌面。 解题思路: 首先要搞清楚牌面的大小顺序。 同花顺(AKQJ10,花色相同就行)>四条(四张相同的牌,炸弹 = =) > 福尔豪斯 (aaabb的牌型) > 同花(5张花色相同) > 顺子 (连续,无视花色。A可以当1也可以当14)> 三条 (aaabc

QzNarsh的博客 621

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

uva 131 The Psychic Poker Player(直接枚举)

The Psychic Poker Player  In 5-card draw poker, a player is dealt a hand of five cards (which may be looked at). The player may then discard between zero and five of his or her cards an

不慌不忙、不急不躁 1832

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

UVA 131 - The Psychic Poker Player 暴力不解释

#include #include #include using namespace std; char t[][20] = {"straight-flush","four-of-a-kind","full-house","flush","straight" ,"three-of-a-kind","two-pairs","one-pair","highest-ca

泪无痕 741

uva131 The Psychic Poker Player

The Psychic Poker Player Time Limit: 3000MS     64bit IO Format: %lld & %llu Description In 5-card draw poker, a player is dealt a hand of five cards (which may be looked at)

keshuqi的博客 553

[枚举]The Psychic Poker Player UVA131

The Psychic Poker Player  In 5-card draw poker, a player is dealt a hand of five cards (which may be looked at). The player may then discard between zero and five of his or her cards and

九问的烦恼 1704

uva 131 -The Psychic Poker Player(德州扑克)

G - The Psychic Poker Player Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Appoint description:  System Crawler  (2013-05-30) Description

NiaNiaJR的专栏 1666

UVa 140 - Bandwidth

全排列,统计记录每个排列中“带宽”最大的值,最后输出所有最大值中最小的那个。 代码如下: #include #include #include #include #include #include using namespace std; int cct, ahl[27], map[27][27]; int save[9], node[9]; char a[500]; int

GooMaple 2202
上一篇: UVa 工具网站
下一篇: UVa 110 - Meta-Loopless Sorts
GooMaple
博客等级 码龄14年 79粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值