题目大意:一种纸牌游戏,将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;
}

  

最新文章

  1. Duilib源码分析(一)整体框架
  2. python学习4 常用内置模块
  3. HTML5中的 Canvas
  4. git忽略某些文件
  5. ZOJ2314 Reactor Cooling
  6. HDU3507 print artical
  7. 关于Windows Azure的常见问题-执行与维护FAQ
  8. windows下练习linux shell
  9. 基于配置文件的Spring注入
  10. luogu3278/bzoj3323 多项式的运算 (splay)
  11. Liunx系统命令sed的使用
  12. PHP学习笔记(二)
  13. October 15th 2017 Week 42nd Sunday
  14. Gulp:插件编写入门
  15. web中浏览PDF文件
  16. Git----02本地仓库进行文件添加&amp;修改&amp;删除&amp;查看
  17. LeetCode——Find Minimum in Rotated Sorted Array
  18. mac制作U盘启动器
  19. DOM操作相关案例 模态对话框,简易留言板,js模拟选择器hover,tab选项卡,购物车案例
  20. 前端学习blog

热门文章

  1. 在CentOS7下从0开始搭建docker并发布tomcat项目
  2. AutoLayout性能不如frame
  3. 原!上线遇到的问题, java序列化关键字transient 修饰的属性变成null了
  4. 双态运维联盟(BOA)正式成立
  5. 洛谷P1736 创意吃鱼法 dp
  6. Python性能鸡汤(转)
  7. Flask系列(四)Flask实现简单页面登陆
  8. Miller-Rabin素数测试算法(POJ1811Prime Test)
  9. NFS-网络文件共享服务
  10. samba文件共享服务配置(multiuser机制)二 (共两节)