Hihocoder 顺子

#1177 : 顺子

时间限制:6000ms

单点时限:1000ms

内存限制:256MB

描述

你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少?

假定赌场使用的是一副牌,四种花色的A、2、3、...、J、Q、K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张。

顺子指的是点数连续的五张牌,包括10、J、Q、K、A这种牌型(不包含同花顺,即构成顺子的五张牌花色不能相同)。参见:https://zh.wikipedia.org/wiki/%E6%92%B2%E5%85%8B%E7%89%8C%E5%9E%8B#.E7.89.8C.E5.9E.8B

输入

一行四个被空格隔开的长度为2或3的字符串,XY,表示你手里的牌。

X为2~10、J、Q、K、A中一个,表示点数,Y为S、H、C、D分别表示黑桃、红心、梅花和方块。

输出

一行一个分数表示概率,注意你的分数需为最简分数,若答案为0输出0/1。

样例输入
10S JS QS KD
样例输出
1/6

EmacsNormalVim

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

using namespace std;
#define maxn 100

int gcd(int a, int b)
{
    return b==0 ? a : gcd(b, a%b);
}

struct Puke
{
    int val;
    int cor;
} P[maxn], T[maxn];

int cmp(const Puke a, const Puke b)
{
    return a.val < b.val;
}

string S;

int color(char ch)
{
    if(ch == 'S') return 1;
    if(ch == 'H') return 2;
    if(ch == 'C') return 3;
    if(ch == 'D') return 4;
}

void predo(string s, int i)
{
    if(s[0] == '1') P[i].val = 10;
    else if(s[0] == 'J') P[i].val = 11;
    else if(s[0] == 'Q') P[i].val = 12;
    else if(s[0] == 'K') P[i].val = 13;
    else if(s[0] == 'A') P[i].val = 14;
    else P[i].val = s[0] - '0';

    if(s[0] == '1')
        P[i].cor = color(s[2]);
    else P[i].cor = color(s[1]);
}

void read()
{
    for(int i=0; i<4; i++)
    {
        cin>>S;
        predo(S, i);
//        cout<<P[i].val<<"  "<<P[i].cor<<endl;
    }
}

void solve()
{
    int ans = 0;
    for(int i=2; i<=14; i++)
        for(int j=1; j<=4; j++)
        {
            for(int i=0; i<4; i++)
                T[i] = P[i];
            T[4] = Puke {i, j};
            sort(T, T+5, cmp);
//
//            for(int k=0; k<5; k++)
//            cout<<T[k].val<<" "<<T[k].cor<<"     ";
//            cout<<endl<<endl;

            bool flag = true;
            bool same = true;
            for(int i=0; i<4; i++)
            {
                if(T[i].val+1 != T[i+1].val) flag = false;
                if(T[i].cor != T[i+1].cor) same = false;
            }

            if(same) flag = false;
            if(flag) ans += 1;
        }
        //cout<<ans<<endl;

    int tmp = gcd(48, ans);
    printf("%d/%d", ans/tmp, 48/tmp);
}

int main()
{
    freopen("1.in.txt", "r", stdin);
    freopen("1.out.txt", "w", stdout);
    read();
    solve();
    return 0;
}

时间: 2024-10-02 02:51:38

Hihocoder 顺子的相关文章

hihoCoder挑战赛12 顺子(hihocoder 1177)

题目链接:http://hihocoder.com/problemset/problem/1177 题面: #1177 : 顺子 时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种花色的A.2.3.....J.Q.K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张. 顺子指的是点数连续的五张牌,包括10.J.Q.K.A这种牌型(不包

模拟 hihoCoder 1177 顺子

题目传送门 1 /* 2 模拟:简单的照着规则做就可以了,把各种情况考虑到,虽然比赛写的丑了点,但能1Y还是很开心的:) 3 */ 4 #include <cstdio> 5 #include <cstring> 6 #include <iostream> 7 #include <algorithm> 8 #include <cmath> 9 using namespace std; 10 11 const int MAXN = 1e2 + 10

hihocoder #1177 : 顺子 模拟

#1177 : 顺子 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/1177 Description 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种花色的A.2.3.....J.Q.K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张. 顺 子指的是点数连续的五张牌,包括10.J.Q

ACM学习历程—Hihocoder 1177 顺子(模拟 &amp;&amp; 排序 &amp;&amp; gcd)(hihoCoder挑战赛12)

时间限制:6000ms 单点时限:1000ms 内存限制:256MB   描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种花色的A.2.3.....J.Q.K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张. 顺子指的是点数连续的五张牌,包括10.J.Q.K.A这种牌型(不包含同花顺,即构成顺子的五张牌花色不能相同).参见:https://zh.wikipedia.org/wiki/%E6%92%B

hihocoder 1177 : 顺子

#1177 : 顺子 时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种花色的A.2.3.....J.Q.K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张. 顺 子指的是点数连续的五张牌,包括10.J.Q.K.A这种牌型(不包含同花顺,即构成顺子的五张牌花色不能相同).参 见:https://zh.wikipedia.org/wi

【hihoCoder】【挑战赛#12】

模拟+枚举+模拟……+构造 QAQAQQQ rank12求杯子! A 顺子 ……模拟题,分类讨论一下就好了……比如当前四张牌是不是同一花色……是不是连续的四张牌,如果是连续的四张牌,是不是两边的……(呀我好像忘了判左边...只判了J Q K A....没判A 2 3 4... 没关系加几个字符就好了……嗯代码已改 1 //hihocoder 12 A 2 #include<vector> 3 #include<cstdio> 4 #include<cstring> 5

扑克牌顺子

题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!"红心A,黑桃3,小王,大王,方片5","Oh My God!"不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13.上面的5张牌就可以变成"1,2,3,4,5"

[hihoCoder#1381]Little Y&#39;s Tree

[hihoCoder#1381]Little Y's Tree 试题描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每次小J会删掉这个树中的k条边,这棵树被分成k+1个连通块.小J想知道每个连通块中最远点对距离的和. 这里的询问是互相独立的,即每次都是在小Y的原树上进行操作. 输入 第一行一个整数n,接下来n-1行每行三个整数u,v,w,其中第i行表示第i条边边权为wi,连接了ui,vi两点. 接下来一行一个整数q,表示有q组询问. 对于每组询问,第一行一个正整数k,接下来一

hihoCoder 1175:拓扑排序二

题目链接: http://hihocoder.com/problemset/problem/1175 题目难度:一星级(简单题) 今天闲来无事,决定刷一道水题.结果发现这道水题居然把我卡了将近一个钟头. 最后终于调通了.总结起来,原因只有一个:不够仔细. 思路不用细说了,就是拓扑排序的简单应用.然而,一些不起眼的细节才是让你掉坑里的真正原因. 猜猜哪儿可能出bug? // A simple problem, but you can't be too careful with it. #inclu