题目:

把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(模拟)相关推荐

  1. 127 - Accordian Patience

    2019独角兽企业重金招聘Python工程师标准>>> 题意: 移牌游戏,按以下规则: 1. 从左向右, 考虑每张牌, 若某张牌与其左边第1张或左边第3张是同一个牌号或花色, 则就把 ...

  2. POJ1214 UVA127 Accordian Patience【vector】

    "Accordian" Patience Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1051 Accep ...

  3. UVA 1156 - Pixel Shuffle(模拟+置换)

    UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该 ...

  4. UVA127 纸牌游戏 “Accordian“ Patience

    这道题是类似于一个邻接表的结构,用vector,来模拟,毕竟写那么多的链表还不会,每个排队一个,然后总的所有的牌堆的编号再送入一个vector里面,一开始我看数据很小,没有注意时间复杂度,20分钟过了 ...

  5. UVA 1637 - Double Patience(概率DP)

    题目链接 https://cn.vjudge.net/problem/UVA-1637 [题意] 36张牌分成9堆,每堆4张,每次可以拿走两堆顶部的牌,但是要求两张牌的点数相同,如果有多种取法那就等概 ...

  6. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  7. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

  8. UVa Online Judge 工具網站

    UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...

  9. UVA - 133 ​​​​​​​The Dole Queue

    The Dole Queue UVA - 133 题目传送门 模拟一遍过程,注:可能会选中同一个人 AC代码: #include <cstdio> #include <iostrea ...

  10. 【ICPC-369】uva 12096 The SetStack Computer

    点击打开链接uva 12096 思路: STL模拟 分析: 1 题目给定5种操作,每次输出栈顶集合的元素的个数 2 利用stack和set来模拟,set保存集合的元素.遇到push的时候直接在stac ...

最新文章

  1. 原来matplotlib 散点图可以这样
  2. 二分查找算法的两种实现方式:非递归实现和递归实现
  3. 【MM】SAP委外加工服务验收产生的会计凭证
  4. 科大星云诗社动态20220107
  5. 完成AOP 顶层设计-AopProxy
  6. 拿不出双十一成绩单,垂直电商何以安身立命?
  7. 前端输入框错误提示_WEB/APP开发基础之旅--前端、服务器端、数据库综合开发案例...
  8. Leetcode 最小栈问题
  9. 12月19日绝地求生服务器维护公告,绝地求生12月19日更新到几点 绝地求生正式服更新维护公告...
  10. 【转】Linux内存管理(最透彻的一篇)
  11. wireshark 分析mptcp ecn语句
  12. 对磁盘做完整镜像(按扇区对扇区备份)的目的
  13. MacBook M1安装Git与Git可视化工具---kalrry
  14. 凯撒密码加密算法python_想偷WiFi?万能钥匙不行?试试python一键破解!|wifi|python|profile|算法|无线网卡...
  15. 我的第一个Imx6ULL应用《百度图像识别》
  16. GB2312字符集对应16进制ANSI、UNICODE、UTF-8编码 (5)
  17. oracle会话占用pga异常,OLTP,单个session占pga大于2G,有见过的没?
  18. 软件测试需要学什么?零基础如何入门软件测试?
  19. 洛谷 - P1008 [NOIP1998 普及组] 三连击 [Java版]
  20. 摄影基础之【**相机画幅、人眼视角范围**】

热门文章

  1. 性能测试二八原则,响应时间2/5/8原则
  2. 日常工作中,个人总结的 - Git - 常用操作方法 (三)
  3. android调用系统的自定义裁剪后得到的图片不清晰,使用MediaStore.EXTRA_OUTPUT获取缓存下的清晰图片...
  4. pfSense修改mbuf值
  5. context menu与submenu区别
  6. linux中正则表达式的用法自解
  7. 曾经的那些绝世电脑高手们
  8. mysql查询4-6_MySQL学习(四)查询
  9. 在NGUI界面的一些问题
  10. 关于margin的数值是百分比,参照对象