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、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

Input

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

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

Output

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

Sample Input

10S JS QS KD

Sample Output

1/6

HINT

题意

题解:

直接模拟就好了,注意花色必须不全部相同

代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define test freopen("test.txt","r",stdin)
#define maxn 100001
#define mod 10007
#define eps 1e-9
const int inf=0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fLL;
inline ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
//**************************************************************************************

//A、2、3、...、J、Q、K
int gcd(int a,int b)
{
    if(b==0)  return a;
    return gcd(b,a%b);
}
int lcm(int a,int b)
{
    int c=gcd(a,b);
    return a*b/c;
}
struct node
{
    int x,y;
};
bool cmp(node a,node b)
{
    return a.x<b.x;
};
string s[4];
vector<node> q;
vector<node> a;
int num[55][5];
int main()
{
    for(int i=0;i<4;i++)
        cin>>s[i];
    for(int i=0;i<4;i++)
    {
        int mmm=0;
        if(s[i][s[i].size()-1]==‘S‘)
            mmm=1;
        else if(s[i][s[i].size()-1]==‘H‘)
            mmm=2;
        else if(s[i][s[i].size()-1]==‘C‘)
            mmm=3;
        else if(s[i][s[i].size()-1]==‘D‘)
            mmm=4;
        if(s[i][0]==‘A‘)
        {
            q.push_back((node){14,mmm});
            num[14][mmm]++;
        }
        else if(s[i][0]==‘J‘)
        {
            q.push_back((node){11,mmm});
            num[11][mmm]++;
        }
        else if(s[i][0]==‘Q‘)
        {
            q.push_back((node){12,mmm});
            num[12][mmm]++;
        }
        else if(s[i][0]==‘K‘)
        {
            q.push_back((node){13,mmm});
            num[13][mmm]++;
        }
        else if(s[i][0]==‘1‘&&s[i][1]==‘0‘)
        {
            q.push_back((node){10,mmm});
            num[10][mmm]++;
        }
        else
        {
            q.push_back((node){s[i][0]-‘0‘,mmm});
            num[s[i][0]-‘0‘][mmm]++;
        }
    }
    int ans=0;
    for(int i=2;i<=14;i++)
    {
        int tt=1;
        while(tt<=4)
        {
            if(num[i][tt])
                tt++;
            a.clear();
            for(int j=0;j<4;j++)
                a.push_back(q[j]);
            a.push_back((node){i,tt});
            sort(a.begin(),a.end(),cmp);
            int flag=0;
            for(int j=0;j<4;j++)
            {
                if(a[j].x!=a[j+1].x-1)
                    break;
                if(j==3)
                    flag++;
            }
            if(flag==1)
            {
                for(int j=0;j<5;j++)
                {
                    for(int kiss=j+1;kiss<5;kiss++)
                    {
                        if(a[j].y!=a[kiss].y)
                        {
                            flag=2;
                            ans++;
                        }
                        if(flag==2)
                            break;
                    }
                    if(flag==2)
                        break;
                }
            }
            tt++;
        }
    }
    int kk=ans,mm=48;
    int t=gcd(kk,mm);
    kk/=t;
    mm/=t;
    printf("%d/%d",kk,mm);
}
时间: 2024-10-12 13:20:34

hihocoder #1177 : 顺子 模拟的相关文章

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 顺子

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

hihoCoder 1392 War Chess 【模拟】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

#1392 : War Chess 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Rainbow loves to play kinds of War Chess games. There are many famous War Chess games such as "Biography of Cao Cao", "Anecdotes of Wagang Mountain", etc. In this problem, let's c

hihoCoder #1053 : 居民迁移(贪心,二分搜索,google在线技术笔试模拟)

#1053 : 居民迁移 时间限制:3000ms 单点时限:1000ms 内存限制:256MB 描述 公元2411年,人类开始在地球以外的行星建立居住点.在第1326号殖民星上,N个居住点分布在一条直线上.为了方便描述,我们设第i个居住点的位置是Xi,其中居住着Yi位居民.随着冬季的到来,一些人口较多的居住点的生态循环系统已经开始超负荷运转.为了顺利度过严冬,殖民星上的居民一致同意通过转移到人口较少的居住点来减轻人口众多的居住点的负荷. 遗憾的是,1326殖民星的环境非常恶劣.在冬季到来前,每个

【hihocoder 1039 字符串消除】模拟

题目链接:http://hihocoder.com/problemset/problem/1039 题意:给定一个只由{A, B, C}组成的字符串s,长度为n, 故包含n+1个空隙:现要求在某个空隙插入一个来自{A, B, C}的字符,然后按照以下“消除规则”对插入后的字符串进行消除操作,问最多能消掉几个字符(包含插入的一个). 消除规则: 1. 自左至右扫描当前字符串,若字符v从某个位置开始连续出现了2次及以上,则此区间内的v全部消除: 2. 重复步骤1直至不再有可消除的字符. 思路:模拟,

hihoCoder - 1039 - 字符消除 (模拟题~)

#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除,余下的子串拼成新的字符串.例如"ABCCBCCCAA"中"CC","CCC"和"AA"会被同时消除,余下"AB"和