Project Euler 54 Poker hands(模拟+hash)

Project Euler 问题 54 的解决方案:在扑克游戏中,玩家 1 赢了多少手?-matlab开发 这是这里发现的问题的解决方案: < http index.php?section=problems&id> 当我解决这个问题时,我发现代码是模块化和简单的。 我认为它可以帮助其他人学习逻辑思维以及如何将一个大问题简化为几个小问题。 这就是为什么我认为我在这里提交解决方案并没有打破任何道德障碍。 立即下载

超级传送门:http://projecteuler.net/problem=54

 

刚看到题目描述,就联想到天津Regional的A题麻将那题,可惜没能AC,遗憾了好久。

这题比麻将那题要简单一些,规则描述比较清楚,要比较两手梭哈牌的大小,我用了hash来存牌,定义了各种判定判断函数来进行判断。

代码量还是比较大的,差不多600行,写的过程中很容易错。Unix/Linux设计思想——小即是美、每个函数的功能尽可能简单的专一,用这种设计思想来写,就不容易出错了。

 

代码如下:

#include <cstdio>
#include <cstring>

#define COLOR_H 0
#define COLOR_C 1
#define COLOR_S 2
#define COLOR_D 3

using namespace std;

char PACards[5][3];
char PBCards[5][3];
int PAHash[4][13];
int PBHash[4][13];

inline int calcPokerIndex(char card)
{
    if (card >= '2' && card <= '9')
        return card - '2';
    if (card == 'T')
        return 8;
    if (card == 'J')
        return 9;
    if (card == 'Q')
        return 10;
    if (card == 'K')
        return 11;
    if (card == 'A')
        return 12;
}

void doHash(char cards[5][3], int hash[4][13])
{
    memset(hash, 0, sizeof(int) * 4 * 13);

    for (int i = 0; i <= 4; i++)
    {
        int pokerIndex = calcPokerIndex(cards[i][0]);

        switch (cards[i][1])
        {
            case 'H':
                hash[COLOR_H][pokerIndex] = 1;
                break;
            case 'C':
                hash[COLOR_C][pokerIndex] = 1;
                break;
            case 'S':
                hash[COLOR_S][pokerIndex] = 1;
                break;
            case 'D':
                hash[COLOR_D][pokerIndex] = 1;
                break;
            default:
                break;
        }
    }
}

int getMaxPoker(int hash[4][13], int which)
{
    int cnt = 0;
    int tmpHash[13];
    memset(tmpHash, 0, sizeof(tmpHash));

    for (int i = 0; i <= 3; i++)
    {
        for (int j = 0; j <= 12; j++)
        {
            if (hash[i][j])
                tmpHash[j]++;
        }
    }

    for (int i = 12; i >= 0; i--)
    {
        while (tmpHash[i])
        {
            tmpHash[i]--;
            cnt++;
            if (cnt == which)
                return i;
        }
    }
}

int isOnePair(int hash[4][13])
{
    int count = 0;
    int pairCount = 0;
    int firstPairVal = 0;

    for (int j = 0; j <= 12; j++)
    {
        count = 0;
        for (int i = 0; i <= 3; i++)
        {
            if (hash[i][j])
                count++;
        }
        if (count == 2)
        {
            pairCount++;
            firstPairVal = j;
        }
    }

    if (pairCount == 1)
        return firstPairVal;

    return -1;
}

int isTwoPairs(int hash[4][13])
{
    int count = 0;
    int pairCount = 0;
    int firstPairVal = 0;
    int secondPairVal = 0;

    for (int j = 0; j <= 12; j++)
    {
        count = 0;
        for (int i = 0; i <= 3; i++)
        {
            if (hash[i][j])
                count++;
        }
        if (count == 2)
        {
            pairCount++;
            if (pairCount == 1)
                firstPairVal = j;
            else
                secondPairVal = j;
        }
    }

    if (pairCount == 2)
        return 13 * secondPairVal + firstPairVal;

    return -1;
}

int isThreeOfAKind(int hash[4][13])
{
    int count = 0;

    for (int j = 0; j <= 12; j++)
    {
        count = 0;
        for (int i = 0; i <= 3; i++)
        {
            if (hash[i][j])
                count++;
        }
        if (count == 3)
            return j;
    }
    return -1;
}

int isStraight(int hash[4][13])
{
    int tmpHash[13];
    memset(tmpHash, 0, sizeof(tmpHash));

    for (int i = 0; i <= 3; i++)
    {
        for (int j = 0; j <= 12; j++)
        {
            if (hash[i][j])
                tmpHash[j]++;
        }
    }

    for (int i = 0; i <= 8; i++)
    {
        if (tmpHash[i] && tmpHash[i + 1] && tmpHash[i + 2] && tmpHash[i + 3] && tmpHash[i + 4])
            return i + 4;
    }

    return -1;
}

int isFlush(int hash[4][13])
{
    int count = 0;

    for (int i = 0; i <= 3; i++)
    {
        count = 0;
        for (int j = 0; j <= 12; j++)
        {
            if (hash[i][j])
                count++;
        }
        if (count == 5)
            return 1;
    }
    return -1;
}

int isFullHouse(int hash[4][13])
{
    int count = 0;
    int pairVal = -1;
    int threeVal = -1;

    for (int j = 0; j <= 12; j++)
    {
        count = 0;
        for (int i = 0; i <= 3; i++)
        {
            if (hash[i][j])
                count++;
        }

        if (count == 2)
            pairVal = j;
        if (count == 3)
            threeVal = j;
    }

    if (pairVal == -1 || threeVal == -1)
        return -1;

    return 13 * threeVal + pairVal;
}

int isFourOfAKind(int hash[4][13])
{
    int count = 0;

    for (int j = 0; j <= 12; j++)
    {
        count = 0;
        for (int i = 0; i <= 3; i++)
        {
            if (hash[i][j])
                count++;
        }
        if (count == 4)
            return j;
    }
    return -1;
}

int isStraightFlush(int hash[4][13])
{
    for (int i = 0; i <= 3; i++)
    {
        for (int j = 0; j <= 8; j++)
        {
            if (hash[i][j] && hash[i][j + 1] && hash[i][j + 2] && hash[i][j + 3] && hash[i][j + 4])
                return j + 4;
        }
    }
    return -1;
}

int isRoyalFlush(int hash[4][13])
{
    for (int i = 0; i <= 3; i++)
    {
        if (hash[i][8] && hash[i][9] && hash[i][10] && hash[i][11] && hash[i][12])
            return 1;
    }
    return -1;
}

int checkDefault(int PAHash[4][13], int PBHash[4][13])
{
    for (int i = 1; i <= 5; i++)
    {
        int PAPokerVal = getMaxPoker(PAHash, i);
        int PBPokerVal = getMaxPoker(PBHash, i);

        if (PAPokerVal != PBPokerVal)
            return PAPokerVal > PBPokerVal;
    }
}

int checkOnePair(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isOnePair(PAHash);
    PBRetVal = isOnePair(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    if (PARetVal != -1 && PBRetVal != -1)
    {
        if (PARetVal != PBRetVal)
            return PARetVal > PBRetVal;

        for (int i = 1; i <= 5; i++)
        {
            int PAPokerVal = getMaxPoker(PAHash, i);
            int PBPokerVal = getMaxPoker(PBHash, i);

            if (PAPokerVal != PBPokerVal)
                return PAPokerVal > PBPokerVal;
        }
    }

    return -1;
}

int checkTwoPairs(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isTwoPairs(PAHash);
    PBRetVal = isTwoPairs(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    if (PARetVal != -1 && PBRetVal != -1)
    {
        if (PARetVal != PBRetVal)
            return PARetVal > PBRetVal;

        for (int i = 1; i <= 5; i++)
        {
            int PAPokerVal = getMaxPoker(PAHash, i);
            int PBPokerVal = getMaxPoker(PBHash, i);

            if (PAPokerVal != PBPokerVal)
                return PAPokerVal > PBPokerVal;
        }
    }

    return -1;
}

int checkThreeOfAKind(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isThreeOfAKind(PAHash);
    PBRetVal = isThreeOfAKind(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    if (PARetVal != -1 && PBRetVal != -1)
    {
        if (PARetVal != PBRetVal)
            return PARetVal > PBRetVal;

        for (int i = 1; i <= 5; i++)
        {
            int PAPokerVal = getMaxPoker(PAHash, i);
            int PBPokerVal = getMaxPoker(PBHash, i);

            if (PAPokerVal != PBPokerVal)
                return PAPokerVal > PBPokerVal;
        }
    }

    return -1;
}

int checkStraight(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isStraight(PAHash);
    PBRetVal = isStraight(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    if (PARetVal != -1 && PBRetVal != -1)
    {
        if (PARetVal != PBRetVal)
            return PARetVal > PBRetVal;

        for (int i = 2; i <= 5; i++)
        {
            int PAPokerVal = getMaxPoker(PAHash, i);
            int PBPokerVal = getMaxPoker(PBHash, i);

            if (PAPokerVal != PBPokerVal)
                return PAPokerVal > PBPokerVal;
        }
    }

    return -1;
}

int checkFlush(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isFlush(PAHash);
    PBRetVal = isFlush(PBHash);

    if (PARetVal != -1 && PBRetVal != -1)
    {
        if (PARetVal == 1 && PBRetVal == 1)
        {
            for (int i = 1; i <= 5; i++)
            {
                int PAPokerVal = getMaxPoker(PAHash, i);
                int PBPokerVal = getMaxPoker(PBHash, i);

                if (PAPokerVal != PBPokerVal)
                    return PAPokerVal > PBPokerVal;
            }
        }
        else
            return PARetVal > PBRetVal;
    }

    return -1;
}

int checkFullHouse(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isFullHouse(PAHash);
    PBRetVal = isFullHouse(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    if (PARetVal != -1 && PBRetVal != -1)
        return PARetVal > PBRetVal;

    return -1;
}

int checkFourOfAKind(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isFourOfAKind(PAHash);
    PBRetVal = isFourOfAKind(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    if (PARetVal != -1 && PBRetVal != -1)
    {
        if (PARetVal == PBRetVal)
        {
            int PASingleVal = -1;
            int PBSingleVal = -1;

            for (int i = 1; i <= 5; i++)
            {
                int pokerVal = getMaxPoker(PAHash, i);
                if (pokerVal != PARetVal)
                {
                    PASingleVal = pokerVal;
                    break;
                }
            }

            for (int i = 1; i <= 5; i++)
            {
                int pokerVal = getMaxPoker(PBHash, i);
                if (pokerVal != PBRetVal)
                {
                    PBSingleVal = pokerVal;
                    break;
                }
            }

            return PASingleVal > PBSingleVal;
        }
        else
            return PARetVal > PBRetVal;
    }
    return -1;
}

int checkStraightFlush(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isStraightFlush(PAHash);
    PBRetVal = isStraightFlush(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    if (PARetVal != PBRetVal)
        return PARetVal > PBRetVal;

    return -1;
}

int checkRoyalFlush(int PAHash[4][13], int PBHash[4][13])
{
    int PARetVal;
    int PBRetVal;

    PARetVal = isRoyalFlush(PAHash);
    PBRetVal = isRoyalFlush(PBHash);

    if (PARetVal != -1 && PBRetVal == -1)
        return 1;
    if (PARetVal == -1 && PBRetVal != -1)
        return 0;

    return -1;
}

int beats(char PA[5][3], char PB[5][3])
{
    doHash(PA, PAHash);
    doHash(PB, PBHash);

    int retVal;

    retVal = checkRoyalFlush(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkStraightFlush(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkFourOfAKind(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkFullHouse(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkFlush(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkStraight(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkThreeOfAKind(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkTwoPairs(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    retVal = checkOnePair(PAHash, PBHash);
    if (retVal != -1)
        return retVal;

    return checkDefault(PAHash, PBHash);
}

int main()
{
    freopen("poker.txt", "r", stdin);

    int ans = 0;
    while(scanf("%s", PACards[0]) > 0)
    {
        for (int i = 1; i <= 4; i++)
            scanf("%s", PACards[i]);
        for (int i = 0; i <= 4; i++)
            scanf("%s", PBCards[i]);

        if (beats(PACards, PBCards))
            ans++;
    }
    printf("%d\n", ans);

    return 0;
}


 

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591) FortiOS 是 Fortinet 公司开发的操作系统,作为 Fortinet 安全平台的核心,提供全面的网络安全功能。 它将网络和安全功能无缝集成,支持跨本地、云、混合和融合 IT/OT/IoT 基础设施环境的统一管理。 FortiOS 7.6 版本引入了生成式人工智能助手、数据保护、托管服务和单一代理等新功能,进一步增强了其安全性和性能。 阅读详情

相关推荐

微信小程序 - 最新详细实现 “餐厅食堂外卖点餐“ 全屏左右联动菜单列表功能界面,附带搜索框、购物车功能、商品加减计算金额、折扣等,左侧商品分类,右侧列表数据,仿美团饿了么外卖点餐页面,饭店扫码点餐!

微信小程序,vue2,vue3,左右联动菜单,商品分类页面,点餐界面,美团外卖点餐,左右布局界面,饿了么点餐页面,左分类右列表,小程序实现左侧菜单,外卖点餐联动,锚点,点击左侧大类后侧列表跟着变跟着刷新,菜单左右联动效果,左菜单右边列表数据,uniapp,左侧菜单,右侧列表双向联动效果,右侧商品滑动时,右侧列表双向联动效果,侧边菜单和右边滚动条,电商项目,购物车,商品加减计算,外卖选餐页面带购物车计算,自动计算金额,微信小程序外卖点餐界面源码,店铺页面滑动左右联动,点餐类小程序界面,堂食,扫码点餐,餐饮行业

🏆 前端领域优质创作者 5160

Project Euler Problem 54: Poker hands【模拟】

PE其他解题报告请参考这里,本题答案在留言首条 Poker hands Problem 54 In the card game poker, a hand consists of five cards and are ranked, from lowest to highest, in the following way: High Card: Highest value card. One ...

nobleman 851

手把手教你学Simulink——基于Simulink的模糊自适应PI调节FOC电流环

本文提出基于模糊自适应PI控制的FOC电流环优化方案,针对传统PI控制参数固化、抗扰性差等问题,通过模糊逻辑在线调整PI参数。方案采用双输入(电流误差及变化率)和三输出(ΔKp/ΔKi/PI调节)结构,实现动态响应时间<30μs(提升38%)、超调<5%(降低71%)、参数摄动下误差<±0.4A(精度提升73%)。详细介绍了Simulink建模步骤,包括模糊规则设计(7语言变量、49条规则)、隶属度函数配置及自适应PI实现逻辑,并提供实机部署建议。仿真结果表明,该方法显著提升系统鲁棒性,特

MHD0815的博客 79

Project Euler 54

#include<bits/stdc++.h> using namespace std; string ss[5]; string tt[5]; int num=0; map<char,int> mp; //map<char,char> cc; int x,x1,x2,x3,x4,x5; int y,y1,y2,y3,y4,y5; bool...

weixin_30343157的博客 179

标准论文参考文献添加方法——Zotero入门使用教程

第一篇论文投出去了,写一下最后一步的参考文献修饰润色吧! 论文的参考文献,即References,是论文的最后一步,相信不管是写毕设论文还是期刊论文都遇到过需要修改参考文献的情况,非常之麻烦。而且参考文献中经常会与生僻奇怪气体出现,一个一个修改非常浪费时间,这里介绍一下一个非常好用的软件Zetero。 第一步:软件的下载安装及绑定Word 尽量使用客户端吧,

MISAYAONE的博客 20万+

鱼鹰优化算法(OOA)详解:从猛禽捕食智能到优化算法实现

鱼鹰优化算法(Osprey Optimization Algorithm, OOA)是2023年提出的一种新型元启发式优化算法,灵感来源于鱼鹰(一种中型猛禽)高效的捕食策略。算法模拟了鱼鹰从空中识别水下鱼类位置并俯冲捕食,然后将捕获的鱼带至安全位置享用的全过程,以此抽象出全局探索和局部开发两个核心阶段。OOA算法具有参数少、结构简单、收敛速度快、全局寻优能力强等特点。自提出以来,已在函数优化、机器学习参数调优(如CatBoost模型)、路径规划等多个领域展现出良好性能,为解决复杂优化问题提供了新的有效工具。

qq_42212808的博客 273

Project Euler :Problem 54 Poker hands

In the card game poker, a hand consists of five cards and are ranked, from lowest to highest, in the following way: High Card: Highest value card.One Pair: Two cards of the same value.Two Pairs: Tw

312小公举的专栏 1362

AutosarMCAL开发——基于TC3x系列时钟系统浅析

本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 889

project euler 54

Problem 54 Poker hands In the card game poker, a hand consists of five cards and are ranked, from lowest to highest, in the following way: High Card: Highest value card.One Pair: Two card

whuawell的博客 714

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 779

ios开发拒绝“玄学”Crash:从循环引用到脏内存,构建你的系统性排查思维模型

你申请了内存,写了数据,这块内存就是脏的。系统无法直接回收它,除非你显式释放,或者系统把它 swap 出去(但在 iOS 上,Compressed Memory 机制虽然能压缩,但不会像桌面系统那样频繁 swap 到磁盘,一旦压缩内存也撑不住,你也得挂)。所以,排查 OOM 的核心心法只有一条:不要问“哪里漏了”,要问“每一刻,留在这个页面上的内存,凭什么必须在这里?一旦内存水位线逼近阈值(不同机型不同,老机器可能 600MB 就危,新机器能抗 1.5GB),系统发个警告。

大模型大数据攻城狮的专栏 724

ZOJ1111:Poker Hands(模拟题)

A poker deck contains 52 cards - each card has a suit which is one of clubs, diamonds, hearts, or spades (denoted C, D, H, S in the input data). Each card also has a value which is one of 2, 3, 4, 5,

ACM!荣耀之路! 4841

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

4655

欧拉工程第54题:Poker hands

package projecteuler51to60; import java.awt.peer.SystemTrayPeer; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import ...

weixin_34174105的博客 268

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Project Euler 44

这道题真是遇到问题了……果然……我写的慢了,超时了……TLE……好久没用这词了~ 注意……这个超时,是指超过了1min……擦…… 题目很简单,就是让你找最小的D出来~ 哎……python的in操作我估计是很慢的……因为根本不知道你的list是否有序,那么就一个一个找吧…… def main(): min = 2147483647 p = [n*(3*n-1)//2

lushl9301的专栏 1246

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Euler Project 54

In the card game poker, a hand consists of five cards and are ranked, from lowest to highest, in the following way:High Card: Highest value card.One Pair: Two cards of the same value.Two Pairs: Two di...

weixin_42147487的博客 507

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

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

【ProjectEuler】ProjectEuler_014

using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace projecteuler014 { class Program { static int[] data = new int[1000001];

sytzz的专栏 485

Project Euler problem 54

一道有点复杂的模拟题吧。。 也不算难写 细节上注意一下就行了。。 首先就是判断rank。 这个还是好判断的。 如果rank一样就要把每个人手中的牌按优先级排列一下,两人按顺序比较 这个优先级,说例子吧。 假如是两个对儿的。  优先比较的肯定是大的那个对儿,然后是小的那个对儿,再然后是那个单张的 再说一个 有一对儿还有三张一样的。 优先比较的是三张的,再比较一对儿的 再一个例子,就有一个对

水 683

Project Euler 11~15

Problem 11: In the 2020 grid below, four numbers along a diagonal line have been marked in red. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 9

Charlie Pan's Blog 1068

百度2012年校招笔试题——pszStringRotate

百度2013校园招聘笔试题 算法与程序设计 第4题:          字符串左移,void *pszStringRotate(char *pszString, int nCharsRotate),比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)。         字符串位移,再简单不过了,方法也很多. 有朴素算法(逐位移动,移动nCharsRotat

Uranux 3073

Project Euler 26 Reciprocal cycles(计算有理小数循环节长度)

超级传送门:http://projecteuler.net/problem=26 算法的核心思想:在除法过程中如果某一状态的除数与被除数和前面某一状态的相等,则后续的除法计算陷入循环,循环节长度就是这两个状态的距离。 例子:计算1/7的循环节长度 状态1: 10/7  得1余3 状态2: 30/7  得4余2 状态3: 20/7  得2余6 状态4: 60/7  得8余4 状

Uranux 1639

HDOJ 2852 KiKi's K-Number(树状数组)

超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意:有一个容器里有m个数(1 分析:用树状数组来维护这个容器,每次查找用二分。 代码: #include #include using namespace std; const int maxn = 100010; int c[maxn]; int n; in

Uranux 1600

POJ 2185 Milking Grid(二维KMP)

超级传送门:http://poj.org/problem?id=2185 这道题网上很多其他的blog上的题解都是错的,由于题目自身数据比较水,便都混过去了。其中一种典型的错误解法是求出每一行/列的最小覆盖长度(ABCAB的最小覆盖长度就是3,即对应ABC),然后LCM,若结果大于串长,则取串长。这是一种典型的错误贪心,诸如: 2 8 ABCDEFAB AAAABAAA 这组数据

Uranux 1232

ZOJ 3430 Detect the Virus(AC自动机+解码)

超级传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3430 本题思路清晰,不过解码确实繁琐,看来自己代码能力还有待加强。 需要注意几个点:解码后的ASCII字符的范围是0~255,而且可能包含'\0',不能用char来存,最好用int。 代码: #include #include #

Uranux 1096

Project Euler 51 Prime digit replacements(枚举)

超级传送门:http://projecteuler.net/problem=51   这题我是暴力枚举的,O3优化后2秒多。 先枚举素数,再枚举要替换的位置,我用二进制来表述,设dc为当前枚举到素数的位数,则替换方法可以从1 ~ (1   代码如下:   #include #include #include using namespace std; int p

Uranux 1086

Project Euler 13 Large sum(大数加法)

超级传送门:http://projecteuler.net/problem=13 自己写的大数加法模板,用的时候注意设定tmp数组适当的长度,避免溢出或浪费空间。 #include #include using namespace std; char num[150][51] = { "3710728753390210279879799822083759024651

Uranux 1077
上一篇: Project Euler 51 Prime digit replacements(枚举)
下一篇: 线性时间复杂度字符串变换算法
Uranux
博客等级 码龄15年 16粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值