博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihocoder #1177 : 顺子 模拟
阅读量:5255 次
发布时间:2019-06-14

本文共 2854 字,大约阅读时间需要 9 分钟。

#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 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
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-9const 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、Kint 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
q;vector
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);}

 

转载于:https://www.cnblogs.com/qscqesze/p/4576924.html

你可能感兴趣的文章
POJ2115 C Looooops
查看>>
单例模式
查看>>
NPOI处理Word文本中上下角标
查看>>
Android笔记 Handler
查看>>
设计模式-(17)策略模式 (swift版)
查看>>
如何阅读大型前端开源项目的源码(转)
查看>>
error:Your local changes to the follwing files would be overwritten by merge
查看>>
java.util.Arrays类详解
查看>>
C# Hashtable
查看>>
idea搭建tocmat
查看>>
NYOJ-626-intersection set(二分查找)
查看>>
YaoLingJump开发者日志(二)
查看>>
数据结构之中缀式计算
查看>>
zoopkeeper
查看>>
shell脚本内sudo无需输入密码
查看>>
Java final关键字特点
查看>>
Ubuntu下安装Python3.4及用python编译py文件
查看>>
android渠道包自动化验证 .
查看>>
S3C2440 偷学
查看>>
[LeetCode] Max Points on a Line
查看>>