UVa127,"Accordian" Patience
注意1堆的时候,pile后面没有s!!!!因为这个WA了一次,否则就1A了
犯了一个很幼稚很幼稚的错误,申请ans[]后玩了吧ans置0,结果调了好长好长时间,本来是敲完就能过的T T啊啊啊啊啊啊,一个多小时没了啊
附上我调试时写的代码(把每一次运转都输出了= =一个一个看的,真心用了好长时间,头都大了)
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#define maxn 100
using namespace std;
struct Node
{
int suit,rank;
//friend ostream& operator<<(ostream& cout,const Point& Node);
};
stack<Node> s[];
int init()
{
for (int i=;i<;i++) while (!s[i].empty()) s[i].pop();
char ch1,ch2;
cin>>ch1;
if (ch1=='#') return ;
cin>>ch2;
Node u;
if (isalpha(ch1))
switch (ch1){
case 'A':u.rank=;break;
case 'T':u.rank=;break;
case 'J':u.rank=;break;
case 'Q':u.rank=;break;
case 'K':u.rank=;break;
}
else u.rank=ch1-'';
switch (ch2){
case 'C':u.suit=;break;
case 'D':u.suit=;break;
case 'H':u.suit=;break;
case 'S':u.suit=;break;
}
s[].push(u);
for (int i=;i<=;i++){
cin>>ch1>>ch2;
if (isalpha(ch1))
switch (ch1){
case 'A':u.rank=;break;
case 'T':u.rank=;break;
case 'J':u.rank=;break;
case 'Q':u.rank=;break;
case 'K':u.rank=;break;
}
else u.rank=ch1-'';
switch (ch2){
case 'C':u.suit=;break;
case 'D':u.suit=;break;
case 'H':u.suit=;break;
case 'S':u.suit=;break;
}
s[i].push(u);
}
}
int match(Node a,Node b){
if (a.suit==b.suit||a.rank==b.rank) return ;
return ;
}
ostream& operator<<(ostream& cout,const Node& p) {
cout<<p.rank<<(char)(p.suit+'B')<<" ";
}
int tot(){
int t=;
for (int i=;i<=;i++)
t+=s[i].size();
cout<<" "<<t;
}
int main()
{
while (init()){
int i=,k,j;
while(i<=){
if (s[i].empty()){
i++;
continue;
}
k=i,j=;
while (k>=&&j<) {k--;if(!s[k].empty()) j++;}
if(j==) if(match(s[k].top(),s[i].top())){
//cout<<s[i].top()<<"->"<<s[k].top();
s[k].push(s[i].top());
s[i].pop();
//cout<<" "<<s[k].top();
//tot();cout<<endl;
i=k;
continue;
}
k=i;j=;
while (k>=&&j<){k--;if(!s[k].empty()) j++;}
if(j==)if(match(s[k].top(),s[i].top())){
//cout<<s[i].top()<<"->"<<s[k].top();
s[k].push(s[i].top());
s[i].pop();
//cout<<" "<<s[k].top();
//tot();cout<<endl;
i=k;
continue;
}
i++;
}
int ans[],top=;
memset(ans,,sizeof(ans));
for (i=;i<=;i++)
if (s[i].size()!=){
top++;
ans[top]=s[i].size();
}
if (top==)cout<<top<<" pile remaining:";
else cout<<top<<" piles remaining:";
for (i=;i<=top;i++) cout<<" "<<ans[i];
cout<<endl;
}
}
UVa127,"Accordian" Patience的更多相关文章
- [刷题]算法竞赛入门经典(第2版) 6-9/UVa127 - "Accordian" Patience
题意:52张牌排一行,一旦出现任何一张牌与它左边的第一张或第三张"匹配",即花色或点数相同,则须立即将其移动到那张牌上面,将其覆盖.能执行以上移动的只有压在最上面的牌.直到最后没有 ...
- ACM学习历程——UVA127 "Accordian" Patience(栈, 链表)
Description ``Accordian'' Patience You are to simulate the playing of games of ``Accordian'' patie ...
- UVA-127 "Accordian" Patience (模拟)
题目大意:一种纸牌游戏,将52张扑克牌排成一列,每次操作可将一张扑克牌移到它的前一张或前面第三张上当牌的点数或花色匹配时.每次都移动最靠左的扑克牌,并且能移动三格就移动三格.求最终扑克牌状态. 题目分 ...
- UVA-127 "Accordian" Patience(模拟)
题目: 把52张牌从左到右排好,每张牌自成一个牌堆.当某张牌与它左边那张牌或者左边第三张牌匹配时(花色或者点数相同)时,就把这张牌移到那张牌上面. 移动之后还要查看是否可以进行其他移动.只有位于牌堆顶 ...
- ACM学习历程——UVA 127 "Accordian" Patience(栈;模拟)
Description ``Accordian'' Patience You are to simulate the playing of games of ``Accordian'' patie ...
- 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 ...
- UVa 127 - "Accordian" Patience
题目:52张扑克,从左到右在平面上排列,按着如下规则处理: 1.按照从左到右的顺序,如果一张牌和左边的第一张或者第三张匹配,就把它放到对应的牌上面. 2.如果可以移动到多个位置,移动到最左端的牌上面. ...
- 【习题 6-9 UVA - 127】"Accordian" Patience
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 链表模拟即可. 1pile不能加s... [代码] #include <bits/stdc++.h> using nam ...
- ``Accordian'' Patience
``Accordian'' Patience You are to simulate the playing of games of ``Accordian'' patience, the rule ...
随机推荐
- 201521123009《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...
- Java第十四周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- Optional变量初学者指南
苹果三周前发布了Swift. 从那时起,我一直在阅读Swift的官方指南,并在Xcode 6测试版中使用. 我开始喜欢Swift的简单和语法. 与我的团队一起,我仍然在研究新的语言,并看看它与Obje ...
- mshadow的原理--MXNet
mshadow的原理--MXNet 这文章主要解释了表达式模板的工作原理(也是mshadow的主要原理),文章的前半部分是翻译自exp-template/README.md.我们会解释它为什么会影响编 ...
- ubuntu下程序员常用命令大全
一.ubuntu下用命令查询系统版本 1.在终端中执行下列指令: cat /etc/issue 该命令可查看当前正在运行的ubuntu的版本号. 效果如图: 2.使用 lsb_release 命令也可 ...
- Django查询数据库性能优化
现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(m ...
- C语言编译过程及数据类型
写在前面 C语言可以称得上是高级语言中的低级语言,接下来一段时间,我会写一下文章关于c语言,把它的神秘面纱一 一揭开.下面主要是c语言的C语言编译过程及数据类型 源文件编译过程 为了使计算机能执行高级 ...
- mybatis(三)
上面2章写了mybatis的基本操作,今天就写写mybatis的动态代理吧. 动态代理有4个基本原则: 1.userMapper.xml里面的namespace="cn.my.dao.Use ...
- CentOS7安装后配置MariaDB
安装后,优先推荐先对安全设置进行配置,键入命令 sudo mysql_secure_installation 键入当前密码,当前没有,直接回车,之后跟随提示会问几个问题:设置 root 密码? / 移 ...
- Markdown 编写规范
说明及目的 作为一个在博客园混迹了俩三年的人,一直在这里看别人的博客,现在准备开始写自己的博客,目的呢,就是一下几点吧: 项目过程中的历史经验教训积累记载,吃一堑长一智,不想在同一个坑掉进去好几次 学 ...