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 ...
随机推荐
- 201521123065《java程序设计》第七周学习总结
1. 本周学习总结 1.Iterator迭代器用于遍历集合中的元素: 2.使用迭代器删除元素一定要先指向下一个元素在删除第一个元素: 3.List可以有重复对象: Set不能有重复对象: 4.Map是 ...
- 201521123110《Java程序与设计》第13周学习总结
1. 本周学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 时间数据不同 ...
- Day-17: 网络编程
---恢复内容开始--- 现有的互联网通讯方式,是服务器端的进程与客户端进程的通信.Python中进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信. 互联网协议 ...
- Struts2第六篇【文件上传和下载】
前言 在讲解开山篇的时候就已经说了,Struts2框架封装了文件上传的功能--..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前,我们在we ...
- 06jQuery-01-基本选择器
1.jQuery概要 JavaScript的一个库,只是一个jquery-xxx.js的文件,它可以让你写更少的代码,做更多的事. $是著名的jQuery符号.实际上,jQuery把所有功能全部封装在 ...
- 从输入 URL 到页面加载完成的过程中都发生了什么
从输入 URL 到页面加载完成的过程中都发生了什么 过程描述 浏览器查找域名对应的 IP 地址: 浏览器根据 IP 地址与服务器建立 socket 连接: 浏览器与服务器通信: 浏览器请求,服务器处理 ...
- React获得真实的DOM操作
真实的DOM操作 ------------------------------------------------------------------------------------------- ...
- JVM读书笔记PART3
一.早期(编译器)优化 语法糖 c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类 而Ja ...
- 为什么Java中的String类是不可变的?
String类是Java中的一个不可变类(immutable class). 简单来说,不可变类就是实例在被创建之后不可修改. 在<Effective Java> Item 15 中提到了 ...
- MySQL高级查询(一)
修改表 修改表名 语法: ALTER TABLE<旧表名> RENAME [TO] <新表名>; 添加字段 语法: ALTER TABLE 表名 ADD 字段名 数据类型 ...