week6限时大模拟A - 掌握魔法の东东 II Gym - 101510B

2023-05-16

week6限时大模拟A - 掌握魔法の东东 II Gym - 101510B

  • A-掌握魔法の东东 II Gym - 101510B
    • 题目描述
    • 输入输出格式及样例
    • 思路
    • 实验代码

A-掌握魔法の东东 II Gym - 101510B

题目描述

从瑞神家打牌回来后,东东痛定思痛,决定苦练牌技,终成赌神!
东东有 A × B 张扑克牌。每张扑克牌有一个大小(整数,记为a,范围区间是 0 到 A - 1)和一个花色(整数,记为b,范围区间是 0 到 B - 1。
扑克牌是互异的,也就是独一无二的,也就是说没有两张牌大小和花色都相同。
“一手牌”的意思是你手里有5张不同的牌,这 5 张牌没有谁在前谁在后的顺序之分,它们可以形成一个牌型。 我们定义了 9 种牌型,如下是 9 种牌型的规则,我们用“低序号优先”来匹配牌型,即这“一手牌”从上到下满足的第一个牌型规则就是它的“牌型编号”(一个整数,属于1到9):
1:同花顺: 同时满足规则 2 和规则 3.
2:顺子 : 5张牌的大小形如 x, x + 1, x + 2, x + 3, x + 4
3:同花 : 5张牌都是相同花色的.
4:炸弹 : 5张牌其中有4张牌的大小相等
5:三带二 : 5张牌其中有3张牌的大小相等,且另外2张牌的大小也相等.
6:两对: 5张牌其中有2张牌的大小相等,且另外3张牌中2张牌的大小相等.
7:三条: 5张牌其中有3张牌的大小相等.
8:一对: 5张牌其中有2张牌的大小相等.
9:要不起: 这手牌不满足上述的牌型中任意一个.
现在, 东东从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 种牌型的方案数(按牌型编号从小到大的顺序)
Input
5 2
1 0 3 1
Output
0 8 0 0 0 12 0 36 0
Input
25 4
0 0 24 3
Output
0 0 0 2 18 1656 644 36432 113344

思路

本题最开始想到的是bfs,用vector数组的assign函数建立很多副本,当副本的数量等于5的时候进行牌组的判断,vector数组的元素是结构体card,card的成员是花色和点数,然后后面又想用数学做法,最后把自己搞崩了。
本题采用暴力做法,使用求排列的方法,只不过这次要比较的参数是两个,花色和点数,由于先输入的两张牌,剩三张牌,然后我们双重循环第三张牌花色和点数,如果第三张牌和前两张拍不同则进入循环体,循环体也是两重循环遍历第四张牌,第四张牌里面又是双重循环遍历第五张牌,总之暴力遍历出不同的五张牌的排列,分别进行牌组判断,进行计数,最后除以重复的次数6即可。
然后我还是wa了好多次,都是低级错误,输出顺序错误,下次一定要注意。

实验代码

#include <iostream>
#include <algorithm>
using namespace std;
int k[9] = { 0,0,0,0,0,0,0,0,0 };
int A, B;
int n[5], f[5];//保存五张牌的数字,花色
int n1, f1, n2, f2, n3, f3, n4, f4, n5, f5;
void check() {
	n[0] = n1; n[1] = n2; n[2] = n3; n[3] = n4; n[4] = n5;
	f[0] = f1; f[1] = f2; f[2] = f3; f[3] = f4; f[4] = f5;
	sort(n, n + 5);
	sort(f, f + 5);
	int temp1 = 1; int temp2 = 1;
	for (int i = 1; i < 5; i++) {
		if (n[i] - n[i - 1] != 1)temp1 = 0;
	}
	if (f[0] != f[4])temp2 = 0;

	if (temp1 == 1 && temp2 == 1)k[0]++;//同花顺
	else if (temp1 == 1)k[1]++;//顺子
	else if (temp2 == 1)k[2]++;//同花
	else if (n[0] == n[3] || n[1] == n[4])k[3]++;//炸弹
	else if (n[0] == n[1] && n[3] == n[4] && (n[2] == n[1] || n[2] == n[3]))k[4]++;//三带二
	else if ((n[0] == n[1] && n[2] == n[3]) || (n[0] == n[1] && n[3] == n[4]) || (n[1] == n[2] && n[3] == n[4]))k[5]++;//两对
	
	else if (n[0] == n[2] || n[1] == n[3] || n[2] == n[4])k[6]++;//三条
	
	else if (n[0] == n[1] || n[1] == n[2] || n[2] == n[3] || n[3] == n[4])k[7]++;//一对
	else k[8]++;
}
int main() {
	cin >> A >> B;
	cin >> n1 >> f1 >> n2 >> f2;
	for (n3 = 0; n3 < A; n3++) {
		for (f3 = 0; f3 < B; f3++) {
			if ((n3 != n1 || f3 != f1) && (n3 != n2 || f3 != f2)) {//第三张牌

				for (n4 = 0; n4 < A; n4++) {
					for (f4 = 0; f4 < B; f4++) {
						if ((n4 != n1 || f4 != f1) && (n4 != n2 || f4 != f2) && (n4 != n3 || f4 != f3)) {//第四张牌

							for (n5 = 0; n5 < A; n5++) {
								for (f5 = 0; f5 < B; f5++) {

									if ((n5 != n1 || f5 != f1) && (n5 != n2 || f5 != f2) && (n5 != n3 || f5 != f3) && (n5 != n4 || f5 != f4)) {//第五张牌
										check();
									}
								}
							}
						}
					}
				}
			}
		}
	}
	cout << k[0] / 6;
	for (int i = 1; i < 9; i++)
		cout <<" "<< k[i] / 6;
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

week6限时大模拟A - 掌握魔法の东东 II Gym - 101510B 的相关文章

  • Week6限时大模拟 A - 掌握魔法の东东 II [Gym - 270437J]

    原题链接 https vjudge net problem Gym 270437J origin 题意 基本思路 本题数据规模不大 xff0c A B 100 A B 100
  • A - 掌握魔法の东东 II(Week6模拟考试)

    题目 从瑞神家打牌回来后 xff0c 东东痛定思痛 xff0c 决定苦练牌技 xff0c 终成赌神 xff01 东东有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围区间是 0 到 A 1 xff09 和
  • Gym - 102470C Lights

    Statement G i v e n v
  • 掌握魔法の东东 II(模拟)

    问题描述 hspace 17pt 从瑞神家打牌回来后 xff0c 东东痛定思痛 xff0c 决定苦练牌技 xff0c 终成赌神 xff01 hspace 17pt 东东有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c
  • Week 6 H (A - 氪金带东)(B - 戴好口罩!)(C - 掌握魔法の东东 I)(D - 数据中心)

    Week 6 A 氪金带东题意思路代码 B 戴好口罩 xff01 题意思路代码 C 掌握魔法 东东 I题意思路代码 D 数据中心题意思路代码 A 氪金带东 题意 思路 首先 xff0c 这个图是棵树 解法 xff1a 三遍DFS 前两遍用来
  • A - 掌握魔法の东东 II

    题意介绍 共有九种牌型 xff0c 先拿出两张牌 xff0c 问每种牌型的可能数 题意分析 用三个for循环对所有组合进行遍历 xff0c 每得到一个组合对这五张牌进行排序 xff0c 看他符合哪一种牌型 xff0c 要注意用 低序号优先
  • week6 限时大模拟 A - 掌握魔法の东东 II

    题意 思路 创建一个pair lt int int gt 类型的数组a xff0c 用来保存一副牌的花色以及大小 运用stl的vector xff0c 来存储手牌shoupai xff0c 随后使用dfs搜索 xff0c 数组a里的牌在手牌
  • Isaac Gym(一)在Ubuntu20.04.1中安装Isaac Gym

    在Ubuntu20 04 1中安装Isaac Gym 前提1 安装 Conda1 1 下载Anaconda3安装文件1 2 运行1 3 设置路径 2 安装 Isaac Gym2 1 下载Isaac Gym安装文件2 2 解压并删除安装包2
  • gym ValueError: too many values to unpack (expected 4) 解决方案

    问题描述 今天在执行以下代码时出现了题述错误 xff1a new obs rew done info 61 self env step action new obs rew done info 61 self env step action
  • Week6限时模拟-掌握魔法の东东 II

    week6限时模拟 掌握魔法 东东 II 思路 xff1a 考虑使用结构体表示牌 xff0c 使用数组表示所有牌 xff0c 之后问题转化为从A B张牌中选出三张牌 xff0c 并且三张牌不是初始的两张牌 xff0c 对于5张牌进行判断类型
  • 选数问题 Gym - 270437C

    题意 xff1a 给定n个正整数 xff0c 从中选取K个数 xff0c 保证这K个数的和是S 求有多少种选择的方法 Input 第一行输入一个整数T T lt 61 100 xff0c 表示有T个测试样例 对于每个例子 xff0c 有两行
  • 掌握魔法的东东II Gym - 101510B

    题意 xff1a 从瑞神家打牌回来后 xff0c 东东痛定思痛 xff0c 决定苦练牌技 xff0c 终成赌神 xff01 东东有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围区间是 0 到 A 1 x
  • 掌握魔法の东东 II Gym-270437

    题目 从瑞神家打牌回来后 xff0c 东东痛定思痛 xff0c 决定苦练牌技 xff0c 终成赌神 xff01 东东有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围区间是 0 到 A 1 xff09 和
  • A - 掌握魔法の东东 II(暴力求解,害!)

    A 掌握魔法 东东 II 题意 xff1a 从瑞神家打牌回来后 xff0c 东东痛定思痛 xff0c 决定苦练牌技 xff0c 终成赌神 xff01 东东有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围
  • 【Anaconda环境】安装gym+pytorch

    1 创建conda新环境 conda create name gymTorch python 61 3 7 conda activate gymTorch xff08 进入新环境 xff09 python如果为3 6版本 xff0c 在导入
  • Ubuntu16.04LTS下搭建强化学习环境gym、tensorflow

    1 安装Anaconda 去清华镜像下载anaconda3 4 3 0 linux x86 64 sh 然后在终端中输入以下命令进行安装 cd downloads bash anaconda3 4 3 0 linux x86 64 sh2
  • codeforces Gym 101341 K Competitions

    Problem codeforces com gym 101341 problem K vjudge net contest 162325 problem K Meaning 有 n 场比赛 每一场有 开始时间 a 结束时间 b 价值 c
  • 强化学习实践二 :理解gym的建模思想

    David Silver的强化学习公开课有几个特点 个人感觉首要的一个特点是偏重于讲解理论 而且有时候为了讲清楚一个理论的来龙去脉 也顺带讲了很多不常用的理论 还有一个特点是小例子很多 这些例子有时候不仅是为了讲清楚一个复杂的算法 而且通过
  • 强化学习实践三 :编写通用的格子世界环境类

    gym里内置了许多好玩经典的环境用于训练一个更加智能的个体 不过这些环境类绝大多数不能用来实践前五讲的视频内容 主要是由于这些环境类的观测空间的某个维度是连续变量而不是离散变量 这是前五讲内容还未涉及到的知识 为了配合解释David Sil
  • gym 101512 BAPC 2014 I Interesting Integers

    Problem codeforces com gym 101512 attachments vjudge net contest 186506 problem I Meaning 给出一个 正整数 n 要找尽量小的 a 和 b a lt b

随机推荐