UVA-127 Accordian Patience(模拟)
题目:
把52张牌从左到右排好,每张牌自成一个牌堆。当某张牌与它左边那张牌或者左边第三张牌匹配时(花色或者点数相同)时,就把这张牌移到那张牌上面。
移动之后还要查看是否可以进行其他移动。只有位于牌堆顶部的牌才能移动或者参与匹配。当牌堆之间出现空隙时要立刻把右边的所有牌堆左移一格来填
补空隙。如果有多张牌可以移动,先移动最左边的那张牌;如果即可以移一格也可以移3格时,移3格。按顺序输入52张牌,输出最后牌堆数以及各牌堆的牌数。
思路:
看完之后知道要用vector和stack来结合解题,但是没有想到erase方法的使用,结果导致代码写的太冗杂。
开52个stack存到vector中,然后按照题目模拟过程。因为移动之后还要判断能否继续移动,那这里就可以结束这次的移动之后跳出这个循环,直接进行下一次
循环就可以了。
代码:
#include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1000000009 #define FRE() freopen("in.txt","r",stdin) #define FRO() freopen("out.txt","w",stdout) using namespace std; typedef long long ll; const int maxn = 200010; int n,m,d[maxn],vis[maxn]; struct Card {char number;char color;Card() {}Card(char n, char c):number(n),color(c) {} }; vector<stack<Card> > pile;void makeString(string str) {//处理字符串,保存所有的牌//cout<<str<<endl;for(int i = 0; i<str.length(); i+=3) {stack<Card> sta;sta.push(Card(str[i],str[i+1]));pile.push_back(sta);} }bool judge(Card a,Card b) {//判断两张牌是否可以匹配if(a.color==b.color || a.number==b.number) {return true;}return false; }void solve() { // for(int i = 0; i<52; i++){ // cout<<pile[i].top().number<<pile[i].top().color<<" "; // if(i==25) // cout<<endl; // } // cout<<endl;while(true) {bool ok = false;for(int i=0; i<pile.size(); i++) {if(i-3>=0 && judge(pile[i].top(),pile[i-3].top())) {//移动3格pile[i-3].push(pile[i].top());pile[i].pop();ok = true;if(pile[i].empty()) {pile.erase(pile.begin()+i);}break;} else if(i-1>=0 && judge(pile[i].top(),pile[i-1].top())) {//移动1格pile[i-1].push(pile[i].top());pile[i].pop();ok = true;if(pile[i].empty()) {pile.erase(pile.begin()+i);}break;}}if(!ok) {break;}}cout<<pile.size();if(pile.size()==1){cout<<" pile remaining: 52"<<endl;}else{cout<<" piles remaining:";for(int i=0; i<pile.size(); i++){cout<<" "<<pile[i].size();}cout<<endl;} }int main() {//FRE();string str;while(true) {pile.clear();int idx=1;getline(cin,str);if(str=="#") {break;}makeString(str);getline(cin,str);makeString(str);solve();}return 0; }
转载于:https://www.cnblogs.com/sykline/p/10300259.html
UVA-127 Accordian Patience(模拟)相关推荐
- 127 - Accordian Patience
2019独角兽企业重金招聘Python工程师标准>>> 题意: 移牌游戏,按以下规则: 1. 从左向右, 考虑每张牌, 若某张牌与其左边第1张或左边第3张是同一个牌号或花色, 则就把 ...
- POJ1214 UVA127 Accordian Patience【vector】
"Accordian" Patience Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1051 Accep ...
- UVA 1156 - Pixel Shuffle(模拟+置换)
UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该 ...
- UVA127 纸牌游戏 “Accordian“ Patience
这道题是类似于一个邻接表的结构,用vector,来模拟,毕竟写那么多的链表还不会,每个排队一个,然后总的所有的牌堆的编号再送入一个vector里面,一开始我看数据很小,没有注意时间复杂度,20分钟过了 ...
- UVA 1637 - Double Patience(概率DP)
题目链接 https://cn.vjudge.net/problem/UVA-1637 [题意] 36张牌分成9堆,每堆4张,每次可以拿走两堆顶部的牌,但是要求两张牌的点数相同,如果有多种取法那就等概 ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- 提取了下刘汝佳推荐的题号...
今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started 10055 - Hashmat the Brave Warrior ...
- UVa Online Judge 工具網站
UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...
- UVA - 133 The Dole Queue
The Dole Queue UVA - 133 题目传送门 模拟一遍过程,注:可能会选中同一个人 AC代码: #include <cstdio> #include <iostrea ...
- 【ICPC-369】uva 12096 The SetStack Computer
点击打开链接uva 12096 思路: STL模拟 分析: 1 题目给定5种操作,每次输出栈顶集合的元素的个数 2 利用stack和set来模拟,set保存集合的元素.遇到push的时候直接在stac ...
最新文章
- 原来matplotlib 散点图可以这样
- 二分查找算法的两种实现方式:非递归实现和递归实现
- 【MM】SAP委外加工服务验收产生的会计凭证
- 科大星云诗社动态20220107
- 完成AOP 顶层设计-AopProxy
- 拿不出双十一成绩单,垂直电商何以安身立命?
- 前端输入框错误提示_WEB/APP开发基础之旅--前端、服务器端、数据库综合开发案例...
- Leetcode 最小栈问题
- 12月19日绝地求生服务器维护公告,绝地求生12月19日更新到几点 绝地求生正式服更新维护公告...
- 【转】Linux内存管理(最透彻的一篇)
- wireshark 分析mptcp ecn语句
- 对磁盘做完整镜像(按扇区对扇区备份)的目的
- MacBook M1安装Git与Git可视化工具---kalrry
- 凯撒密码加密算法python_想偷WiFi?万能钥匙不行?试试python一键破解!|wifi|python|profile|算法|无线网卡...
- 我的第一个Imx6ULL应用《百度图像识别》
- GB2312字符集对应16进制ANSI、UNICODE、UTF-8编码 (5)
- oracle会话占用pga异常,OLTP,单个session占pga大于2G,有见过的没?
- 软件测试需要学什么?零基础如何入门软件测试?
- 洛谷 - P1008 [NOIP1998 普及组] 三连击 [Java版]
- 摄影基础之【**相机画幅、人眼视角范围**】
热门文章
- 性能测试二八原则,响应时间2/5/8原则
- 日常工作中,个人总结的 - Git - 常用操作方法 (三)
- android调用系统的自定义裁剪后得到的图片不清晰,使用MediaStore.EXTRA_OUTPUT获取缓存下的清晰图片...
- pfSense修改mbuf值
- context menu与submenu区别
- linux中正则表达式的用法自解
- 曾经的那些绝世电脑高手们
- mysql查询4-6_MySQL学习(四)查询
- 在NGUI界面的一些问题
- 关于margin的数值是百分比,参照对象