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 ...
最新文章
- 高级转录组分析和R语言数据可视化第12期 (线上线下同时开课)
- 编程软件python t-Python 3.7 64位下载
- oracle中的java无法_Java无法连接oracle
- 35天 GRE: V160+Q168+W3.5
- 商丘高中计算机考试成绩查询系统,2019商丘中考招生成绩查询时间及网站公布...
- 程序包管理器控制台 Add-Migration 用法
- 一步一步安装UEFI分区方式的windows 10 企业版
- 句句真研—每日长难句打卡Day14
- bat替换文件中的字符串_JavaScript 中替换字符串的几种方法
- 联想服务器RD450 配置RAID5阵列图文方法
- Elasticsearch(待学习)
- 如何从“人肉运维”升级为“智能运维”?
- 开机直接进入键盘布局_开机怎么进入安全模式(windows10停留选择键盘布局)
- 源自神话的写作要义之英雄之旅
- ios html fixed,关于IOS的Safari浏览器fixed定位失效的那些坑
- Qt WA_TranslucentBackground 导致视频渲染不了的问题
- LeedCode 24:两两交换链表中的节点
- 华为OD机试 - 最小调整顺序次数、特异性双端队列
- oppo怎么广告接入_oppo信息流广告投放操作指南
- 2010年01月读书单
热门文章
- HDOJ--1599--find the mincost route(floyd+最小环)
- MySQL 5之存储过程
- DockOne微信分享(一四一):如何开发部署Kubernetes Native应用
- 实操指南|数据分析遇上餐饮业
- Head First C 学习日志 第十章 进程间通信 输入输出重定向
- [Python] 探索性编程与idleX
- java linux和windows下文件路径间隔符的写法——解决linux下程序在windows下运行时的上传文件出错问题...
- Windows系统服务相关的端口
- Unity 血条跟随效果
- c++中的explicit关键字及隐式类型转换