Card Game【map】

Card Game

题面翻译

题目描述

两名玩家正在玩在线纸牌游戏。游戏使用一副 32 32 32 张牌进行。每张牌都有花色和数字。有四种花色:梅花、方块、红心和黑桃。用字符 CDHS 分别表示它们。共有 8 种数字,按递增顺序为 23456789

每张牌由两个字母表示:其等级和花色。例如,红心 8 可以表示为 8H

在游戏开始时,会选择一种花色作为王牌花色。

在每一轮中,玩家的操作如下:第一个玩家在桌子上放一张牌,第二个玩家必须用自己的一张牌打败这张牌。之后,两张牌都被移动到弃牌堆中。

一张牌可以打败另一张牌,如果两张牌都具有相同的花色,并且第一张牌的等级比第二张牌高。例如,方块 8 可以打败方块 4。此外,王牌可以打败任何非王牌牌,无论牌的等级如何,例如,如果王牌花色是梅花 (C),那么梅花 3 可以打败方块 9。请注意,王牌只能被等级更高的王牌打败。

游戏中进行了 n n n 轮,因此弃牌堆现在包含 2 n 2n 2n 张牌。你想要重建游戏中进行的轮次,但是弃牌堆中的牌已经洗牌。找到可能在游戏中玩过的 n n n 轮的任何可能顺序。

输入格式

第一行包含整数 t t t 1 ≤ t ≤ 100 1\le t\le100 1t100),表示测试数据数量。接下来是 t t t 个测试数据。

每个测试数据的第一行包含整数 n n n 1 ≤ n ≤ 16 1\le n\le16 1n16)。

每个测试数据的第二行包含一个字符,即王牌花色。它是 CDHS 中的一个。

每个测试数据的第三行包含 2 n 2n 2n 张牌的描述。每张牌由一个两个字符的字符串描述,第一个字符是牌的等级,是 23456789 中的一个,第二个字符是牌的花色,是 CDHS 中的一个。所有牌都是不同的。

输出格式

对于每个测试用例,输出答案:

打印 n n n 行。在每一行中,以与输入相同的格式打印两张牌的描述:第一张牌是第一个玩家打出的牌,然后是第二个玩家用来打败它的牌。
如果没有解决方案,则打印一行 IMPOSSIBLE
如果有多个解决方案,则打印其中任何一个。

题目描述

Two players are playing an online card game. The game is played using a 32-card deck. Each card has a suit and a rank. There are four suits: clubs, diamonds, hearts, and spades. We will encode them with characters ‘C’, ‘D’, ‘H’, and ‘S’, respectively. And there are 8 ranks, in increasing order: ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’.

Each card is denoted by two letters: its rank and its suit. For example, the 8 of Hearts is denoted as 8H.

At the beginning of the game, one suit is chosen as the trump suit.

In each round, players make moves like this: the first player places one of his cards on the table, and the second player must beat this card with one of their cards. After that, both cards are moved to the discard pile.

A card can beat another card if both cards have the same suit and the first card has a higher rank than the second. For example, 8S can beat 4S. Additionally, a trump card can beat any non-trump card, regardless of the rank of the cards, for example, if the trump suit is clubs (‘C’), then 3C can beat 9D. Note that trump cards can be beaten only by the trump cards of higher rank.

There were $ n $ rounds played in the game, so the discard pile now contains $ 2n $ cards. You want to reconstruct the rounds played in the game, but the cards in the discard pile are shuffled. Find any possible sequence of $ n $ rounds that might have been played in the game.

输入格式

The first line contains integer $ t $ ( $ 1 \le t \le 100 $ ) — the number of test cases. Then $ t $ test cases follow.

The first line of a test case contains the integer number $ n $ ( $ 1\le n\le 16 $ ).

The second line of a test case contains one character, the trump suit. It is one of “CDHS”.

The third line of a test case contains the description of $ 2n $ cards. Each card is described by a two-character string, the first character is the rank of the card, which is one of “23456789”, and the second one is the suit of the card, which is one of “CDHS”. All cards are different.

输出格式

For each test case print the answer to it:

  • Print $ n $ lines. In each line, print the description of two cards, in the same format as in the input: the first card that was played by the first player, and then the card that was used by the second player to beat it.
  • If there is no solution, print a single line “IMPOSSIBLE”.

If there are multiple solutions, print any of them.

样例 #1

样例输入 #1

8
3
S
3C 9S 4C 6D 3S 7S
2
C
3S 5D 9S 6H
1
H
6C 5D
1
S
7S 3S
1
H
9S 9H
1
S
9S 9H
1
C
9D 8H
2
C
9C 9S 6H 8C

样例输出 #1

3C 4C
6D 9S
3S 7S
IMPOSSIBLE
IMPOSSIBLE
3S 7S
9S 9H
9H 9S
IMPOSSIBLE
6H 9C
9S 8C

思路分析
本题的关键就在于排序,一开始本想着用vector存放王牌和非王牌的两种情况,然后随取随用,后来发现这种想法不好处理,因为每一个都是数字加字母,排序的话可能会出现错误导致一些问题,所以我们根据H.S.C.D四种不同的情况进行分类排序处理即可。即用map存放前置字母,然后把当前出的牌放在后面。

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<vector>
#define x first
#define y second
using namespace std;
int t, n;
char a;
string s;
int main() {cin >> t;while (t--){bool st = 1;map<char, vector<string>>mp;//map相当于编号cin >> n >> a;int k = 0;for (int i = 0; i < 2 * n; i++) {cin >> s;mp[s[1]].push_back(s);}vector<char>cc = { 'C','D','H','S' };for (char c : cc) {sort(mp[c].begin(), mp[c].end());//分类排序}for (char c : cc) {if (c != a && mp[c].size() % 2 != 0) k++;//是否需要王牌协助}if ( k> mp[a].size() || mp[a].size() % 2 != k % 2) {//王牌数量太小了或者王牌帮了忙导致王牌多余cout << "IMPOSSIBLE" << endl;/直接不可能continue;}for (char c : cc){if (c == a) continue;//先不处理王牌if (mp[c].size() % 2 == 1)//需要王牌协助处理的情况{cout << mp[c].back() << " " << mp[a].back() << endl;mp[c].pop_back(), mp[a].pop_back();//用完了拿出来}}for (char c :cc) {for (int i = 0; i < mp[c].size(); i += 2) {//剩下由于拍好了序两两分配即可cout << mp[c][i] << " " << mp[c][i + 1] << endl;}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《中国数据库前世今生》观影——认识1980年起步阶段

引出 中国数据库的前世今生观影——认识1980年的起步阶段 20 世纪 60 年代国外就有了商业数据库&#xff0c;20 世纪 80 年代我国才有了第一批数据库专业人才。不要小看这 20 年的差距&#xff0c;它可能需要几代数据库人用一生去追。2024 年了&#xff0c;中国跨过数据库这座大…

搞DDR你必须得看看我的这篇笔记

Hi! 这篇约你一起深入认识一下DDR。 文章目录 DDR基础DDR是什么?DDR有什么用?为什么要用DDRDDR协议是如何演进的如何访问DDRDDR关键时序参数ACTIVATE Timing 激活时序REFRESH Timing 刷新时序READ Timing 读时序写时序模式寄存器时序DDR基础 DDR是什么? 如果你在学生时代自…

动态创建标签jQuery效果

动态创建标签jQuery效果https://www.bootstrapmb.com/item/14832 使用jQuery来动态创建HTML标签并添加效果是一种常见的方法。以下是一个简单的示例&#xff0c;说明如何使用jQuery来动态创建<div>标签&#xff0c;并给它们添加一些基本的效果。 1. 创建一个新的<di…

Ubuntu 24.04 LTS 无法打开Chrome浏览器

解决办法&#xff1a; 删除本地配置文件&#xff0c;再次点击Chrome图标&#xff0c;即可打开。 rm ~/.config/google-chrome/ -rf ref: Google chrome not opening in Ubuntu 22.04 LTS - Ask Ubuntu

3GPP眼中的XR及其技术特点

3GPP R18 支持了XR Services。XR需要高数据速率和低延迟通信&#xff0c;这也真是5G可以大展身手的地方。这篇就从3GPP的角度看下XR是什么以及XR有哪些技术特点。 Extended Reality (XR) 是指由计算机技术和可穿戴设备生成的所有现实与虚拟相结合的环境和人机交互技术。 实际上…

使用vscode搜索打开的文件夹下的文件

右键空白处打开命令面板 摁一次删除键&#xff0c;删除掉图中的大于号 这样就能够找到例化的模块&#xff0c;文件具体在哪个位置&#xff0c;然后打开了

探索WebKit的Web Serial API:开启串行通信的新纪元

探索WebKit的Web Serial API&#xff1a;开启串行通信的新纪元 在现代Web开发中&#xff0c;与硬件设备的交互变得越来越普遍。WebKit的Web Serial API为Web应用提供了一种直接与串行设备通信的能力&#xff0c;使得开发者能够通过浏览器与外部设备进行数据交换。这项技术的应…

python实现责任链模式

把多个处理方法串成一个list。下一个list的节点是上一个list的属性。 每个节点都有判断是否能处理当前数据的方法。能处理&#xff0c;则直接处理&#xff0c;不能处理则调用下一个节点&#xff08;也就是当前节点的属性&#xff09;来进行处理。 Python 实现责任链模式&#…

【Unity】RPG2D龙城纷争(十七)敌方常规AI(Normal)的实现

更新日期:2024年7月24日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、AI_Normal类二、AI调遣策略第一阶段:收集1.提供战场数据收集方法2.收集战场数据三、AI调遣策略第二阶段:评估四、AI调遣策略第三阶段:行动简介 AI_Normal定位为框架自带的最基础的…

Vue3升级了哪些重要的功能

createApp // vue2.x const app new Vue({ .... });//vue3.x const app Vue.createApp({ ... });emits属性 // 父组件 <HelloWorld :msg"msg" sayHello"onSayHello" />export default {name: HelloWorld,props: {msg: String},emits: [onSayHell…

汽车充电桩投资盈利方案

说明&#xff1a;系统支持SASS运营商多开&#xff0c;每个月运营商都有独立小程序、独立收款。支持各种引流平台的互联互通充电&#xff0c;如星星充电、特来电、快电等等&#xff0c;实现地图软件如高德地图上充电导航。后台有每日统计、单枪运能、大数据面板。独立的移动端管…

STL标准模板库---容器篇(一)

STL(Standard Template Library)是C的一套功能强大的 C 模板类和函数的集合&#xff0c;它提供了一系列通用的、可复用的算法和数据结构。 STL 的设计基于泛型编程&#xff0c;这意味着使用模板可以编写出独立于任何特定数据类型的代码。 STL 分为多个组件&#xff0c;包括容…

常用的自动化测试工具有哪些?

什么是自动化测试&#xff1f;简单来说&#xff0c;自动化测试就是通过重复执行预定义的动作来执行测试用例的系统来代替人工操作。为了充分利用自动化&#xff0c;必须选择正确的自动化测试工具。 一、自动化测试工具有哪些 1、Selenium WEB自动化测试 Selenium是网页应用中最…

electron-builder打包vue2项目不显示element-ui图标

1、使用版本 vue ^2.6.14element-ui ^2.15.14vue-cli-plugin-electron-builder 2.1.1 2、解决办法 1&#xff09; 如果是简单的图标可以使用图片代替&#xff08;这种对于elementui组件的图标还是不会显示&#xff09; 2&#xff09;在vue.config.js配置 const { defineCon…

C# 冒泡排序

栏目总目录 概念 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它通过重复遍历待排序的数列&#xff0c;比较每对相邻的项&#xff0c;并在顺序错误时交换它们的位置&#xff0c;直到没有需要交换的项为止。由于排序过程中小数逐渐“浮”到前…

代码随想录day20 669. 修剪二叉搜索树 、108.将有序数组转换为二叉搜索树 、538.把二叉搜索树转换为累加树

代码随想录day20 669. 修剪二叉搜索树 、108.将有序数组转换为二叉搜索树 、538.把二叉搜索树转换为累加树 669. 修剪二叉搜索树 我自己的思路是和前一道题一样&#xff0c;遇见一个不符合的就调用一次删掉该结点的函数&#xff0c;这样明显就麻烦了&#xff0c;其实只要小于…

BUUCTF [MRCTF2020]Ezpop

这道题对于刚接触到pop链的我直接把我整懵了&#xff0c;一边看着魔术方法一边分析 魔术方法可以看这里PHP 魔术方法 - 简介 - PHP 魔术方法 - 简单教程&#xff0c;简单编程 (twle.cn) 代码解析 经过以上的分析我们可以理一下解题思路&#xff1a;接收参数反序列化之前先触发…

03 capture软件操作界面和常用设置介绍04 capture软件自带元件库设置

03 capture软件操作界面和常用设置介绍&&04 capture软件自带元件库设置 第一部分 03 capture软件操作界面和常用设置介绍一、分辨率二、产品选择三、颜色设置四、格点设置 第二部分 04 capture软件自带元件库设置 第一部分 03 capture软件操作界面和常用设置介绍 一、…

C++要点总结_02_表达式与语句

表达式与语句 2 表达式与语句2.1 算术运算符 2 表达式与语句 运算符就是具有运算功能的符号。“::” &#xff1a;作用域运算符。->&#xff1a;成员指针运算符。运算符种类&#xff1a;算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、移位运算符、sizeof运算…

持续更新-各种趁手的开源工具

开源工具名称用途参考及备注 zcurd zcurd是一个通用的后台管理系统&#xff0c;有完善的用户、菜单权限管理及表单管理的开发方案。 https://www.oschina.net/p/zcurd?hmsraladdin1e1 简单业务可以通过[表单配置]快速生成&#xff0c;特定业务通过代码生成&#xff0c;完成…