题目:

把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. 高级转录组分析和R语言数据可视化第12期 (线上线下同时开课)
  2. 编程软件python t-Python 3.7 64位下载
  3. oracle中的java无法_Java无法连接oracle
  4. 35天 GRE: V160+Q168+W3.5
  5. 商丘高中计算机考试成绩查询系统,2019商丘中考招生成绩查询时间及网站公布...
  6. 程序包管理器控制台 Add-Migration 用法
  7. 一步一步安装UEFI分区方式的windows 10 企业版
  8. 句句真研—每日长难句打卡Day14
  9. bat替换文件中的字符串_JavaScript 中替换字符串的几种方法
  10. 联想服务器RD450 配置RAID5阵列图文方法
  11. Elasticsearch(待学习)
  12. 如何从“人肉运维”升级为“智能运维”?
  13. 开机直接进入键盘布局_开机怎么进入安全模式(windows10停留选择键盘布局)
  14. 源自神话的写作要义之英雄之旅
  15. ios html fixed,关于IOS的Safari浏览器fixed定位失效的那些坑
  16. Qt WA_TranslucentBackground 导致视频渲染不了的问题
  17. LeedCode 24:两两交换链表中的节点
  18. 华为OD机试 - 最小调整顺序次数、特异性双端队列
  19. oppo怎么广告接入_oppo信息流广告投放操作指南
  20. 2010年01月读书单

热门文章

  1. HDOJ--1599--find the mincost route(floyd+最小环)
  2. MySQL 5之存储过程
  3. DockOne微信分享(一四一):如何开发部署Kubernetes Native应用
  4. 实操指南|数据分析遇上餐饮业
  5. Head First C 学习日志 第十章 进程间通信 输入输出重定向
  6. [Python] 探索性编程与idleX
  7. java linux和windows下文件路径间隔符的写法——解决linux下程序在windows下运行时的上传文件出错问题...
  8. Windows系统服务相关的端口
  9. Unity 血条跟随效果
  10. c++中的explicit关键字及隐式类型转换