题目:52张扑克,从左到右在平面上排列,按着如下规则处理:

1.按照从左到右的顺序,如果一张牌和左边的第一张或者第三张匹配,就把它放到对应的牌上面。

2.如果可以移动到多个位置,移动到最左端的牌上面。(匹配:花色或者数值相同)

分析:数据结构、栈、模拟。对于每叠牌建立一个栈,进行模拟即可。

注意:每次只移动每叠牌的最顶上的牌。

#include <iostream>
#include <cstdlib>
#include <cstdio> using namespace std; char Card[54][54][3];
int Top[54];
int Sum;//记录合并的叠数 int match( char* a, char *b )
{
return (a[0] == b[0] || a[1] == b[1]);
} int deal( int now, int s )
{
//判断是否能移动s步长
int count = 0,temp = now;
while ( temp >= 0 && count < s )
if ( Top[-- temp] >= 0 )
count ++;
//判断是否匹配
if ( temp >= 0 && match( Card[now][Top[now]], Card[temp][Top[temp]] ) ) {
Top[temp] ++;
Card[temp][Top[temp]][0] = Card[now][Top[now]][0];
Card[temp][Top[temp]][1] = Card[now][Top[now]][1];
if ( -- Top[now] < 0 ) Sum ++;
return temp;
}else return -1;
} int main()
{
while ( scanf("%s",Card[0][0]) && Card[0][0][0] != '#' ) {
for ( int i = 1 ; i < 52 ; ++ i )
scanf("%s",Card[i][0]);
for ( int i = 0 ; i < 52 ; ++ i )
Top[i] = 0; Sum = 0;
for ( int now = 1 ; now < 52 ; ) {
while ( Top[now] < 0 ) now ++;
//向左移动3步
int save = deal( now, 3 );
if ( save >= 0 )
now = save;
else {
//向左移动1步
save = deal( now, 1 );
if ( save >= 0 )
now = save;
else now ++;
}
} printf("%d pile",52-Sum);
if (51 > Sum) printf("s");
printf(" remaining:");
for ( int i = 0 ; i < 52 ; ++ i )
if ( Top[i] >= 0 )
printf(" %d",Top[i]+1);
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 poj 1214 `Accordian'' Patience 纸牌游戏 模拟

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

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

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

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

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

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

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

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

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

  7. UVa 1637 - Double Patience(概率DP)

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

  8. UVa 170 - Clock Patience

    题目:Clock Patience游戏,将52张扑克牌,按时钟依次分成13组(中心一组),每组4张全都背面向上, 从中间组最上面一张牌開始.翻过来设为当前值,然后取当前值相应组中最上面的背过去的牌翻过 ...

  9. UVA 1637 Double Patience

    题意:36张扑克,平分成9摞,两张数字一样的可以拿走,每次随机拿两张,问能拿光的概率. 解法:记忆化搜索,状态压缩.一开始我想在还没拿的时候概率是1,然后往全拿光推···样例过不去···后来觉得推反了 ...

随机推荐

  1. 【零基础学习iOS开发】【02-C语言】11-函数的声明和定义

    在上一讲中,简单介绍了函数的定义和使用,只要你想完成一个新功能,首先想到的应该是定义一个新的函数来完成这个功能.这讲继续介绍函数的其他用法和注意事项. 一.函数的声明 1.在C语言中,函数的定义顺序是 ...

  2. 基于SMB协议的共享文件读写

    一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件.打印机.串口等.SMB 协议可以用在因特 ...

  3. JavaScript动态操作style

    1.易错:修改元素的样式不是设置class属性,而是className属性.class是JS的一个保留关键字. 2.易错:单独修改样式的属性使用"style.属性名"3.注意在cs ...

  4. 树莓派raspbian安装配置(基本配置+中文配置+远程桌面+lighttpd+php+mysql)

    raspbian为树莓派的官方系统,基于Debian裁剪过的Linux系统 其配置过程如下 烧录镜像 首先从树莓派的官方网站上下载镜像和镜像工具 http://www.raspberrypi.org/ ...

  5. word文档左侧显示目录

    word2007  选择word的视图,然后选择文档结构图

  6. Bad Request (Invalid Hostname)解决方法

    当在Windows Server 2003+IIS6做Web服务器,出现打开如http://paullevi.oicp.net,出现,Bad Request (Invalid Hostname) 的提 ...

  7. Cobar分布式数据库的应用与实践

    最新文章:看我如何快速学习.Net(高可用数据采集平台).高并发数据采集的架构应用(Redis的应用) 问题点: 随着项目的增长,数据和数据表也成倍的增长,普通的单点数据库已经无法满足日常的增长的需要 ...

  8. Hibernate之HQL介绍

    Hibernate中提供了多种检索对象的方式,主要包括以下种类: 导航对象图检索方式:根据已经加载的对象导航到其他对象 OID检索方式:根据对象的OID来检索对象 HQL检索方式:使用面向对象的HQL ...

  9. 查询Table name, Column name, 拼接执行sql文本, 游标, 存储过程, 临时表

    018_Proc_UpdateTranslations.sql: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO if (exists (select ...

  10. POJ2104 K-th Number 划分树 模板题啊

    /*Source Code Problem: 2104 User: 96655 Memory: 14808K Time: 1282MS Language: G++ Result: Accepted S ...