UVa和POJ都有这道题。

不同的是UVa要求区分单复数,而POJ不要求。

使用STL做会比較简单,这里纯粹使用指针做了,很麻烦的指针操作,一不小心就错。

调试起来还是很费力的

本题理解起来也是挺费力的,要搞清楚怎样模拟也不easy啊,读题要非常细致。

纯指针的操作挺快的吧。

只是POJ 0ms,而UVa就0.2左右了。

三相链表:

1 仅仅要有叠起来的牌。那么就使用一个down指针指向以下的牌就能够了。

2 使用双向链表,能够方便前后遍历。

3 记得有了更新牌之后。又要又一次開始检查是否须要更新牌,这是模拟的须要。不然或WA的。

#include <stdio.h>

struct Node
{
int size;
Node *pre, *post;
Node *down;
char a, b;
Node () : pre(NULL), post(NULL), down(NULL), size(1) {}
}; //insert n to m position
inline void insertNode(Node *&m, Node *&n)
{
n->post = m->post;
n->pre = m->pre;
if (m->post) m->post->pre = n;//小心断链
if (m->pre) m->pre->post = n;//小心断链
} inline void takeoutNode(Node *&n)
{
if (n->down)
{
Node *down = n->down;
insertNode(n, down);
return;
}
if (n->pre) n->pre->post = n->post;
if (n->post) n->post->pre = n->pre;
} inline void inStackNode(Node *&m, Node *&n)
{
n->size = m->size+1;
insertNode(m, n);
n->down = m;
} inline bool checkMovable(Node *n, Node *m)
{
return n->a == m->a || n->b == m->b;
} inline void pre3(Node *&n)
{
if (n->pre) n = n->pre;
if (n->pre) n = n->pre;
if (n->pre) n = n->pre;
} inline void pre1(Node *&n)
{
if (n->pre) n = n->pre;
} inline void deleteNodes(Node *&n)
{
while (n)
{
Node *p = n->post;
while (n)
{
Node *d = n->down;
delete n; n = NULL;
n = d;
}
n = p;
}
} int main()
{
Node *head = new Node; //Dummy head
while (true)
{
Node *it = new Node;
it->a = getchar();
if (it->a == '#') break;
it->b = getchar();
getchar(); head->post = it;//initialize chain
it->pre = head; for (int i = 1; i < 52; i++)
{
Node *p = new Node;
p->a = getchar();
p->b = getchar();
getchar();
it->post = p;
p->pre = it;
it = p;
}
bool checkMove = true;
while (checkMove)
{
checkMove = false;
it = head->post;
while (it)
{
Node *post = it->post;
Node *p = it;
pre3(p);
if (p && p != head && checkMovable(p, it))
{
checkMove = true;
takeoutNode(it);
inStackNode(p, it);//调用參数不要乱了
break;
}
p = it;
pre1(p);
if (p && p != head && checkMovable(p, it))
{
checkMove = true;
takeoutNode(it);
inStackNode(p, it);
break;//题意,理解
}
it = post;
}//while (it)
}//while (checkMove && piles > 1)
it = head->post;
int piles = 0;
while (it)
{
piles++;
it = it->post;
}
if (piles == 1) printf("%d pile remaining:", piles);
else printf("%d piles remaining:", piles);
it = head->post;
while (it)
{
printf(" %d", it->size);
it = it->post;
}
putchar('\n');
deleteNodes(head->post);
}//while (true)
delete head;
return 0;
}

UVa 127 - &quot;Accordian&quot; Patience POJ 1214 链表题解的更多相关文章

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

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

  2. 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 ...

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

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

  4. UVa 127 - "Accordian" Patience

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

  5. UVA 11732 &quot;strcmp()&quot; Anyone? (Trie)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  6. Cookie rejected: Illegal path attribute &quot;/nexus&quot;. Path of origin: &quot;/content/&quot; 解

    问题叙述性说明 通过运行"mvn clean deploy" 命令 将 Maven 项目公布 Nexus 当PW.举例控制台输出以下警告消息: [INFO] Downloaded: ...

  7. socket何时处于”读就绪状态“?---通过“应用程序大爷&quot;和&quot;内核孙子&quot;对话再看重要的select函数的使用方法

    前面. 我已经陆续介绍过select函数的一些零碎知识, 在本文中,我们来讨论这样一个问题:socket何时处于读就绪状态? 事实上主要讨论select函数, 毕竟socket的读就绪状态会导致sel ...

  8. 2018 Spring Single Training B (uva 572,HihoCoder 1632,POJ 2387,POJ 2236,UVA 10054,HDU 2141)

    这场比赛可以说是灰常的水了,涨信心场?? 今下午义务劳动,去拿着锄头发了将近一小时呆,发现自己实在是干不了什么,就跑到实验室打比赛了~ 之前的比赛补题补了这么久连一场完整的都没补完,结果这场比完后一小 ...

  9. WAMP 2.5 &quot;FORBIDDEN&quot; error

    对于web开发人员来说.远程訪问站点能够非常方便的提高开发站点开发效率,那么在wamp环境下,默认仅仅支持本地訪问,那么怎样訪问开启远程站点訪问呢? 开启方法: wamp2.5(32bit) 集成环境 ...

随机推荐

  1. ajax post 传递数组参数

    1.前言 此文章仅作为记录,方便查阅. 2.代码 javascript: var idArr = ['one','two','Three']; $.ajax({ type: 'POST', data ...

  2. 生活工作必备之SMART原则

    所谓SMART原则,即: 1. 目标必须是具体的(Specific) 2. 目标必须是可以衡量的(Measurable) 3. 目标必须是可以达到的(Attainable) 4. 目标必须和主要目标具 ...

  3. vue系列之webpack

    webpack 地址: https://github.com/vuejs-templates/webpack 注意里面的template,用webpack创建的项目,结构就是这样的

  4. OCM_第五天课程:Section2 —》AGENT 的安装 、GC 的使用

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  5. 读取本地图片 BitmapImage

    BitmapImage defImage = new BitmapImage(); defImage.BeginInit(); defImage.UriSource = new Uri(@" ...

  6. 升级 php composer 版本

    在执行 composer update 时,报错 You made a reference to a non-existent script @php artisan package:discover ...

  7. 2017-2018-2 20155309 南皓芯 Exp7 网络欺诈防范

    实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 1,简单应用SET工具建立冒名网站 2.ettercap DNS spoof 3.结合应用两种技术,用 ...

  8. ERP商品类型管理相关业务处理(三十五)

    根据类型编号获取父类名称 -- ============================================= CREATE FUNCTION [dbo].[FN_getParentTyp ...

  9. JDK和CGLIB生成动态代理类的区别

     关于动态代理和静态代理 当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象. 按照代理对象的创建时期不同,可以分为两种: 静态代 ...

  10. 【读书笔记】《深入浅出Webpack》

    Webpack版本 分析版本为3.6.0 4.0为最近升级的版本,与之前版本变化较大,编译输出的文件与3.0版本会不一致,目前项目中使用的版本3.0版本,所以基于3.0版本进行分析学习. Webpac ...