news 2026/4/18 7:56:33

UVa 127 “Accordian” Patience

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 127 “Accordian” Patience

题目分析与解题思路

本题要求模拟“手风琴”接龙游戏的进行过程。游戏规则如下:

  • 将一副52 5252张牌从左到右依次发牌,每张牌成为一个牌堆。
  • 任何时候,若某张牌与其左边相邻牌堆的最上方一张牌匹配(花色相同或点数相同),或与其左边第三堆的最上方一张牌匹配,则可以将其移动到匹配的牌堆上。
  • 移动后,如果出现空堆,立即将所有右侧牌堆左移填充空隙。
  • 当有多种可能的移动时,优先移动最左边可以移动的牌;若一张牌既可以左移一单位也可以左移三单位,则选择移动三单位。
  • 游戏结束条件为无法再移动任何牌,目标是尽可能合并牌堆,最终可能只剩一个牌堆获胜。

问题理解:

由于移动操作会影响后续移动的可能性,而且移动顺序和选择策略影响最终结果,因此需要严格按照题目描述的规则进行模拟。关键在于如何高效实现移动、合并和空堆压缩。

数据结构选择:

  • 使用vector<vector<string>> piles存储所有牌堆,每个牌堆是一个string的向量,底部为最早发的牌,顶部为最后发的牌(即最上方的一张)。
  • 由于需要频繁访问每个牌堆的顶部牌,以及可能需要删除空牌堆和插入新牌,使用vector可以提供较好的随机访问和尾部操作性能。

算法流程:

  1. 发牌:每次读取两行,每行26 2626张牌,每张牌作为一个单独的牌堆加入piles中。
  2. 游戏循环:
    • 每次移动前,先清除所有空堆(即piles[i].size() == 0的堆)。
    • 从最左边的牌堆开始向右检查,对于每个牌堆,先判断是否能向左移动三格(如果左边第三堆存在且匹配),若可以则移动并更新索引;否则判断是否能向左移动一格,若可以则移动;否则继续向右检查。
    • 移动后,将当前牌堆的顶部牌移动到目标牌堆的顶部(即push_back),并删除原牌堆的顶部牌(即pop_backerase)。
    • 循环直到一次完整扫描中没有发生任何移动,游戏结束。
  3. 输出:输出剩余牌堆的数量及各堆的牌数。

移动策略:

  • 由于要求移动最左边可能的牌,并且优先移动三格,因此在检查每个牌堆时,先判断能否移动三格,再判断能否移动一格。
  • 移动后,索引回退到目标堆的位置,继续从该位置向左检查可能的移动,这是因为移动可能导致新的匹配机会。

时间复杂度:

  • 最坏情况下,每张牌可能需要多次移动,每次移动可能需要遍历整个牌堆列表。
  • 由于牌的总数是固定的52 5252张,且每次移动至少减少一个牌堆(合并或删除空堆),因此操作次数有限,实际运行时间可接受。

注意事项:

  • 输入以#开头的一行结束。
  • 输出格式:剩余牌堆数 +pile(s) remaining:+ 各堆牌数。
  • 注意空堆的及时清除。

参考代码

// "Accordian" Patience// UVa ID: 127// Verdict: Accepted// Submission Date: 2015-11-28// UVa Run Time: 1.159s//// 版权所有(C)2015,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;vector<vector<string>>piles;voidprint(){cout<<piles.size();cout<<(piles.size()>1?" piles":" pile")<<" remaining:";for(inti=0;i<piles.size();i++)cout<<" "<<piles[i].size();cout<<endl;}voidgetCards(string line){istringstreamiss(line);string card;while(iss>>card){vector<string>pile;pile.push_back(card);piles.push_back(pile);}}boolcanMoveToLeft(intindex){return(index>0&&(piles[index].back()[0]==piles[index-1].back()[0]||piles[index].back()[1]==piles[index-1].back()[1]));}boolcanMoveToThirdLeft(intindex){return(index>2&&(piles[index].back()[0]==piles[index-3].back()[0]||piles[index].back()[1]==piles[index-3].back()[1]));}voidplay(){while(true){for(inti=piles.size()-1;i>=0;i--)if(piles[i].size()==0)piles.erase(piles.begin()+i);intindex=0;boolmoved=false;while(index>=0&&index<piles.size()){if(piles[index].size()==0)break;if(canMoveToThirdLeft(index)){piles[index-3].push_back(piles[index].back());piles[index].erase(piles[index].end());index-=3;moved=true;continue;}if(canMoveToLeft(index)){piles[index-1].push_back(piles[index].back());piles[index].erase(piles[index].end());index-=1;moved=true;continue;}index++;}if(!moved)break;}}intmain(intargc,char*argv[]){string line1,line2;while(true){piles.clear();getline(cin,line1);if(line1.front()=='#')break;getCards(line1);getline(cin,line2);getCards(line2);play();print();}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:04:52

企业本地化解决方案:自主可控的翻译系统搭建

企业本地化解决方案&#xff1a;自主可控的翻译系统搭建 &#x1f310; AI 智能中英翻译服务 (WebUI API) &#x1f4d6; 项目简介 在全球化业务拓展与多语言内容管理日益频繁的背景下&#xff0c;企业对高质量、低延迟、可私有化部署的翻译系统需求持续增长。传统的云翻译服务…

作者头像 李华
网站建设 2026/4/10 2:29:51

无需16G显存!小显存用户如何快速运行Z-Image-Turbo模型

无需16G显存&#xff01;小显存用户如何快速运行Z-Image-Turbo模型 Z-Image-Turbo是阿里通义实验室开源的一款高效图像生成模型&#xff0c;仅需8步即可完成亚秒级推理&#xff0c;在16GB显存设备上表现优异。但对于只有6GB显存的笔记本用户来说&#xff0c;本地运行可能面临显…

作者头像 李华
网站建设 2026/4/18 6:52:39

QuarkPanTool夸克网盘高效管理终极指南

QuarkPanTool夸克网盘高效管理终极指南 【免费下载链接】QuarkPanTool 一个批量转存、分享和下载夸克网盘文件的工具&#xff0c;可以快速地将大量分享文件转存到到自己的网盘内&#xff0c;或者将网盘文件批量生成分享链接 项目地址: https://gitcode.com/gh_mirrors/qu/Qua…

作者头像 李华
网站建设 2026/4/18 9:11:15

AI+游戏开发:快速集成Z-Image-Turbo生成游戏素材

AI游戏开发&#xff1a;快速集成Z-Image-Turbo生成游戏素材 作为一名独立游戏制作人&#xff0c;你是否曾为设计RPG游戏中的场景贴图而头疼&#xff1f;手动绘制耗时耗力&#xff0c;外包又成本高昂。现在&#xff0c;通过Z-Image-Turbo镜像&#xff0c;你可以用简单的API调用快…

作者头像 李华
网站建设 2026/4/18 7:42:22

小白也能懂:用预配置镜像快速搭建Z-Image-Turbo开发环境

小白也能懂&#xff1a;用预配置镜像快速搭建Z-Image-Turbo开发环境 作为一名刚接触AI的大学生&#xff0c;想要学习图像生成技术却苦于计算资源不足&#xff1f;Z-Image-Turbo作为一款高性能文生图模型&#xff0c;能够帮助你快速入门AI绘画领域。本文将手把手教你如何通过预配…

作者头像 李华
网站建设 2026/4/18 9:44:16

教学实践:如何用预配置镜像在课堂上演示阿里通义模型

教学实践&#xff1a;如何用预配置镜像在课堂上演示阿里通义模型 作为一名计算机视觉课程的讲师&#xff0c;我经常需要在课堂上展示最新的AI图像生成技术。但学校的服务器资源有限&#xff0c;部署新模型往往需要复杂的配置和漫长的等待时间。最近我发现使用预配置的阿里通义模…

作者头像 李华