打牌(求牌型方案数)

2023-05-16

问题描述

有 A × B 张扑克牌。每张扑克牌有一个大小(整数,记为a,范围区间是 0 到 A - 1)和一个花色(整数,记为b,范围区间是 0 到 B - 1。
扑克牌是互异的,也就是独一无二的,也就是说没有两张牌大小和花色都相同。
“一手牌”的意思是你手里有5张不同的牌,这 5 张牌没有谁在前谁在后的顺序之分,它们可以形成一个牌型。 我们定义了 9 种牌型,如下是 9 种牌型的规则,我们用“低序号优先”来匹配牌型,即这“一手牌”从上到下满足的第一个牌型规则就是它的“牌型编号”(一个整数,属于1到9):

同花顺: 同时满足规则 5 和规则 4.
炸弹 : 5张牌其中有4张牌的大小相等.
三带二 : 5张牌其中有3张牌的大小相等,且另外2张牌的大小也相等.
同花 : 5张牌都是相同花色的.
顺子 : 5张牌的大小形如 x, x + 1, x + 2, x + 3, x + 4
三条: 5张牌其中有3张牌的大小相等.
两对: 5张牌其中有2张牌的大小相等,且另外3张牌中2张牌的大小相等.
一对: 5张牌其中有2张牌的大小相等.
要不起: 这手牌不满足上述的牌型中任意一个.

现在, 从A × B 张扑克牌中拿走了 2 张牌!分别是 (a1, b1) 和 (a2, b2). (其中a表示大小,b表示花色)
现在要从剩下的扑克牌中再随机拿出 3 张!组成一手牌!!
我们要预言未来的可能性,即将拿到的“一手牌”的可能性,我们用一个“牌型编号(一个整数,属于1到9)”来表示这手牌的牌型,那么未来有 9 种可能,但每种可能的方案数不一样。
现在,你需要算一算 9 种牌型中,每种牌型的方案数。

Input

第 1 行包含了整数 A 和 B (5 ≤ A ≤ 25, 1 ≤ B ≤ 4).第 2 行包含了整数 a1, b1, a2, b2 (0 ≤ a1, a2 ≤ A - 1, 0 ≤ b1, b2 ≤ B - 1, (a1, b1) ≠ (a2, b2)).

Output

输出一行,这行有 9 个整数,每个整数代表了 9 种牌型的方案数(按牌型编号从小到大的顺序)

Examples

Input

5 2
1 0 3 1

Output

0 0 0 0 8 0 12 36 0

Input

25 4
0 0 24 3

Output

0 2 18 0 0 644 1656 36432 113344

问题分析

这是一道模拟题(当然你也可以用排列组合的数学方法,但是情况真的是太多啦~~~),分别枚举3张牌,再去判断这5张牌的牌型是什么,时间复杂度O(ABABAB)。重点工作就是去重,要避免重复的枚举情况,这是一个组合问题,而不是排列,即一张牌的位置没有影响,(a1, b1),(a2, b2)= (a2, b2),(a1, b1)。
附上代码:

#include<iostream>
#include<algorithm>
using namespace std;
int ans[10], A, B, num[26];
struct P {
	int a, b;
	bool operator<(const P& t) { return a<t.a; }
}x[5];

int solve()
{
	bool f[10];
	for (int k = 1; k < 10; k++)f[k] = true;
	for (int w = 0; w < 4; w++)
		for (int v = w + 1; v < 5; v++)
			if (x[w].b != x[v].b) {
				f[4] = false; break;
			}
	for (int w = 0; w < 4; w++)
			if (x[w].a != (x[w+1].a - 1)) {
				f[5] = false; break;
			}
	if (f[4] && f[5])return 1;
	for (int w = 0; w < 5; w++)
		num[x[w].a] = 0;
	for (int w = 0; w < 5; w++)
		num[x[w].a]++;

	int tot[6];
	for (int w = 0; w < 6; w++)tot[w] = 0;
	for (int w = 0; w < 5; w++) {
		tot[num[x[w].a]]++;
		num[x[w].a] = 0;
	}
	if (tot[4])return 2;
	if (tot[3] == 1 && tot[2] == 1)return 3;

	if (f[4])return 4;
	if (f[5])return 5;
	if (tot[3])return 6;
	if (tot[2] == 2)return 7;
	if (tot[2] == 1)return 8;
	return 9;
}
int main() {
	int i[5], j[5];

	for (int i = 1; i < 10; i++)ans[i] = 0;
	cin >> A >> B >> i[0] >> j[0] >> i[1] >> j[1];
	for (i[2] = 0; i[2] < A; i[2]++)
		for (j[2] = 0; j[2] < B; j[2]++)
			for (i[3] = 0; i[3] < A; i[3]++)
				for (j[3] = 0; j[3] < B; j[3]++)
					for (i[4] = 0; i[4] < A; i[4]++)
						for (j[4] = 0; j[4] < B; j[4]++)
						{
							bool flag = true;
							
							for (int w = 2; w < 4; w++)
								for (int v = w + 1; v < 5; v++)
									if (i[w]*B+j[w]>= i[v]*B+j[v]) {
										flag = false;
										break;
									}
							if (flag) {
								for (int w = 2; w < 5; w++)
									if ((i[w] == i[0] && j[w] == j[0]) || (i[w] == i[1] && j[w] == j[1]))
										flag = false;
								if (flag) {
									for (int k = 0; k < 5; k++) {
										x[k].a = i[k];
										x[k].b = j[k];
									}
									sort(x, x + 5);
									ans[solve()]++;
								}
							}
							
						}
	for (int i = 1; i < 9; i++)cout << ans[i] << " ";
	cout << ans[9];
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打牌(求牌型方案数) 的相关文章

随机推荐

  • Http请求中Content-Type讲解

    言 xff1a 在Http请求中 xff0c 我们每天都在使用Content type来指定不同格式的请求信息 xff0c 但是却很少有人去全面了解content type中允许的值有多少 xff0c 这里将讲解Content Type的可
  • 5分钟搭建自己的代码托管平台gitlab

    熟练的使用git和github已经成为了每个程序员必备的技能 git可以使我们更好的管理和维护自己的代码 xff0c 可以使团队成员之间以更高效的方式进行工作 xff0c github作为一个免费好用的代码托管平台 xff0c 在一定程度上
  • 【小白向】手把手教你发布自己写的HTML静态网页

    相对于C 43 43 JAVA等编程语言的复杂难学 xff0c HTML CSS JS可以说是对刚接触计算机的同学最友好的编程语言了 特别是随着主流浏览器都支持了HTML5 CSS3 xff0c 就算是新手 xff0c 只要费点心思 xff
  • 用轻量服务器搭建自己的pdf在线工具箱(支持pdf压缩以及pdf OCR)

    上篇文章中我们讲了怎么利用腾讯轻量云服务器搭建一个PDF在线压缩工具 xff0c 今天我们来搭建一个更强大的工具 xff0c 不仅支持PDF在线压缩 xff0c 还支持PDF OCR文字识别 前言 前两天需要压缩一个pdf文件 xff0c
  • 用轻量服务器搭建imgproxy来获取不同尺寸的图片

    现在很多站长都喜欢搭建一个自己的私有图床来管理图片 xff0c 使用的一般都是第三方的开源图床程序 有时候可能第三方的图床程序不能完全满足我们的需要 xff0c 比如说 xff0c 我们上传了一张图片以后 xff0c 在不同的页面下 xff
  • 在轻量服务器上使用NextList搭建OneDriver列表程序

    什么是列表程序 xff1f 我们平时都会使用各种各样的网盘程序来把我们的文件保存到互联网上 xff0c 然后在需要的时候再从网盘中下载文件 一般情况下 xff0c 浏览文件列表以及下载文件都必须先登录网盘账号 xff0c 如果我们想要把文件
  • 良心云最近活动是真多啊,一波接一波,大伙有需要的上车

    1 轻量云2核免费升配4核 直接去控制台选择248套餐升级就行 xff0c 有这个配置的可以去操作一下 xff0c 截止到这个月底 我已经升了 附上轻量控制台链接 xff1a https console cloud tencent com
  • beego打包在windows上闪退

    打包拿到其他windows机器上运行 xff0c 直接闪退无法正常运行 没办法 xff0c 在cmd下运行可执行文件 发现又以下报错 xff1a ORM 2020 09 11 14 29 12 register db Ping 96 def
  • Debian11.3配置SSH允许root用户远程登录系统

    系统版本 root 64 localhost cat etc os release PRETTY NAME 61 34 Debian GNU Linux 11 bullseye 34 NAME 61 34 Debian GNU Linux
  • Shell 脚本常用命令

    Shell 脚本的概念 将平时使用的各种Linux命令按顺序保存 xff08 堆叠 xff09 到一个文本文件中 xff0c 添加上执行权限 xff0c 就是一个Shell脚本 将要执行的命令按先后顺序保存到一个文本文件 给该文件可执行权限
  • 来,看看记事本里会变成乱码的字……不仅仅是“联通”而已……

    众所周知 xff0c 联通 这两个字直接默认保存到记事本里会出现乱码 xff0c 变成小黑块 具体原因网上解释很多 xff0c 总结起来就一句话 xff1a 联通 的内码是0xC1 1100 0001 0xAA 1010 1010 0xCD
  • Python读取Word表格数据

    import docx from docx import Document 导入库 path 61 34 E python data 1234 docx 34 文件路径 document 61 Document path 读入文件 tabl
  • Python:下载和安装Pygame

    1 下载Pygame包 注意 xff1a 根据Python版本和Windows系统的位数选择要对应版本的Pygame包 官网地址 xff1a http www pygame org download shtml 其中 xff0c 如果Pyt
  • python 编写input和output函数,输出学生信息

    题目 xff1a 编写input 和output 函数输入 xff0c 输出5个学生的数据记录 解释 xff1a 可以通过函数的方式实现 xff0c 也可以用类的方式实现 xff0c 下面举例用类的方法实现 xff1a span class
  • python 调整行和列

    在 Excel 中 xff0c 调整行和列的大小非常容易 xff0c 只要点击并拖动行的边缘 xff0c 或列的 头部 但如果你需要根据单元格的内容来设置行或列的大小 xff0c 或者希望设置大量电 子表格文件中的行列大小 xff0c 编写
  • Word 文件转换为 markdown

    本文主要介绍在Ubuntu系统下面如何将 word 文件转换为 markdown 文件 第一步 xff1a 安装 unoconv 和 pandoc su span class operator span class keyword styl
  • VS2013平台搭建——关于无法打开“kernel32.lib”和无法运行“rc.exe”的解决方法

    背景 xff1a 由于项目需要 xff0c 必须使用VS2013作为开发平台 由于以前一直使用的是VS2010 xff0c 平台搭建时傻瓜式下一步到底就完成了 xff0c 这次遇到了点小困难 xff0c 找了点资料解决了 留个记录 xff0
  • iOS autolayout自适应cell高度时使用estimatedRowHeight的一些问题

    estimatedRowHeight是一个预估高度 xff0c 再iOS11之前默认是0 xff0c 也就是默认关闭 xff0c 在iOS11下 xff0c 默认44 再iOS11下也可以让estimatedRowHeight 61 0来关
  • 解决关闭deepin 15.11“自动索引内置磁盘”后仍然卡顿的问题

    关闭文件管理器中 自动索引内置磁盘 后 xff0c 查看iotop xff0c 已经没有占用磁盘的程序 xff0c 然而系统仍然卡顿 由于使用过程中听到磁盘频繁休眠 启动 xff1b 并且系统使用中卡死 以及待机后启动并卡死 xff0c 强
  • 打牌(求牌型方案数)

    问题描述 有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围区间是 0 到 A 1 xff09 和一个花色 xff08 整数 xff0c 记为b xff0c 范围区间是 0 到 B 1 扑克牌是互异的 x