题目大意:一种纸牌游戏,将52张扑克牌排成一列,每次操作可将一张扑克牌移到它的前一张或前面第三张上当牌的点数或花色匹配时。每次都移动最靠左的扑克牌,并且能移动三格就移动三格。求最终扑克牌状态。

题目分析:利用栈这种数据结构模拟,以为会超时,没想到AC了。

代码如下:

# include<iostream>
# include<cstdio>
# include<map>
# include<stack>
# include<cstring>
# include<algorithm>
using namespace std; struct Poke
{
char v,f;
Poke(char _v,char _f):v(_v),f(_f){}
};
char str[2];
stack<Poke>s[52]; int get(int pos,int k)
{
for(int i=pos-1;i>=0;--i){
if(!s[i].empty()){
--k;
if(k==0) return i;
}
}
return -1;
} bool match(const Poke &a,const Poke &b)
{
return a.v==b.v||a.f==b.f;
} bool toDo(int i,int k)
{
Poke a=s[i].top();
Poke b=s[k].top();
if(match(a,b)){
s[k].push(a);
s[i].pop();
return true;
}
return false;
} void solve()
{
int i;
while(1)
{
for(i=1;i<52;++i){
if(s[i].empty())
continue;
int k=get(i,3);
if(k!=-1&&toDo(i,k))
break;
k=get(i,1);
if(k!=-1&&toDo(i,k))
break;
}
if(i>=52)
break;
}
} int main()
{
while(scanf("%s",str))
{
if(str[0]=='#')
break;
for(int i=0;i<52;++i)
while(!s[i].empty())
s[i].pop();
s[0].push(Poke(str[0],str[1]));
for(int i=1;i<52;++i){
scanf("%s",str);
s[i].push(Poke(str[0],str[1]));
Poke u=s[i].top();
}
solve();
int k=0;
for(int i=0;i<52;++i)
if(!s[i].empty())
++k;
if(k==1)
printf("1 pile remaining: 52\n");
else{
printf("%d piles remaining:",k);
for(int i=0;i<52;++i)
if(!s[i].empty())
printf(" %d",s[i].size());
printf("\n");
}
}
return 0;
}

  

UVA-127 "Accordian" Patience (模拟)的更多相关文章

  1. ACM学习历程——UVA 127 "Accordian" Patience(栈;模拟)

    Description  ``Accordian'' Patience  You are to simulate the playing of games of ``Accordian'' patie ...

  2. UVa 127 - "Accordian" Patience

    题目:52张扑克,从左到右在平面上排列,按着如下规则处理: 1.按照从左到右的顺序,如果一张牌和左边的第一张或者第三张匹配,就把它放到对应的牌上面. 2.如果可以移动到多个位置,移动到最左端的牌上面. ...

  3. Uva 127 poj 1214 `Accordian'' Patience 纸牌游戏 模拟

    Input Input data to the program specifies the order in which cards are dealt from the pack. The inpu ...

  4. [刷题]算法竞赛入门经典(第2版) 6-9/UVa127 - "Accordian" Patience

    题意:52张牌排一行,一旦出现任何一张牌与它左边的第一张或第三张"匹配",即花色或点数相同,则须立即将其移动到那张牌上面,将其覆盖.能执行以上移动的只有压在最上面的牌.直到最后没有 ...

  5. UVA127- "Accordian" Patience(模拟链表)

    "Accordian" Patience You are to simulate the playing of games of ``Accordian'' patience, t ...

  6. ACM学习历程——UVA127 "Accordian" Patience(栈, 链表)

    Description  ``Accordian'' Patience  You are to simulate the playing of games of ``Accordian'' patie ...

  7. UVa 127 - &quot;Accordian&quot; Patience POJ 1214 链表题解

    UVa和POJ都有这道题. 不同的是UVa要求区分单复数,而POJ不要求. 使用STL做会比較简单,这里纯粹使用指针做了,很麻烦的指针操作,一不小心就错. 调试起来还是很费力的 本题理解起来也是挺费力 ...

  8. 【习题 6-9 UVA - 127】"Accordian" Patience

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 链表模拟即可. 1pile不能加s... [代码] #include <bits/stdc++.h> using nam ...

  9. UVA-127 "Accordian" Patience(模拟)

    题目: 把52张牌从左到右排好,每张牌自成一个牌堆.当某张牌与它左边那张牌或者左边第三张牌匹配时(花色或者点数相同)时,就把这张牌移到那张牌上面. 移动之后还要查看是否可以进行其他移动.只有位于牌堆顶 ...

随机推荐

  1. ZOJ 3212 K-Nice

    K-Nice Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge This is a super simple pr ...

  2. 括号匹配问题(区间dp)

    简单的检查括号是否配对正确使用的是栈模拟,这个不必再说,现在将这个问题改变一下:如果给出一个括号序列,问需要把他补全成合法最少需要多少步? 这是一个区间dp问题,我们可以利用区间dp来解决,直接看代码 ...

  3. Linux的操作系统I2C驱动架构解说

    Linux的操作系统I2C驱动架构解说 发布时间:2006.10.16 04:52 来源:赛迪网技术社区 作者:LoneStar 最近因为工作需要涉及到了I2C总线.虽然我过去用过I2c,但看了 Li ...

  4. linux彻底删除nginx

    卸载 删除 nginx 1.删除nginx,–purge包括配置文件 sudo apt-get --purge remove nginx 1 2.自动移除全部不使用的软件包 sudo apt-get ...

  5. React Native专题-江清清

    本React Native讲解专题:主要讲解了React Native开发,由基础环境搭建配置入门,基础,进阶相关讲解. 刚创建的React Native交流8群:533435865  欢迎各位大牛, ...

  6. 6.安装pyhook报错is not a supported wheel on this platform

    解决方法: 先找到合适的格式: 然后,选择合适的版本: 安装即可成功:

  7. SQL面试题及答案

    我觉得里面有些答案是不正确的,请只作参考 Student(S#,Sname,Sage,Ssex) 学生表       S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Cour ...

  8. devise修改密码

    https://ruby-china.org/topics/1314 password/edit不是给你直接改密码用的 这个是忘记密码后,发送重置密码的邮件到你邮箱,同时生成一个token 然后你点那 ...

  9. Ubuntu 系统下暴力卸载 MySQL

    一.概述 MySQL 出问题了,正常的 start.stop 不起作用. apt-get remove mysql-server apt-get remove mysql-client 上面这些命令不 ...

  10. JQuery+CSS3实现Ajax加载时loading效果

    之前通过Ajax请求加载数据的时候,在数据还没有呈现出来前,为了更好的用户体验,总会弄个loading告诉用户其实内容正在加载,而不是网站崩了.但是貌似之前使用gif图片的情况比较多,可能是为了兼容各 ...