首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边的牌堆,L表示翻一下左边的牌堆,直到最后摞成了一个牌堆。后面跟着一排问题,输入i,问从上往下数的第i张牌编号,以及这张牌的状态。

这题只要读懂了题意思路也挺清晰的了,用栈进行模拟一步一步走就行了,我的思路是先对牌的状态进行计算,如果是R,就把这一步右边所有牌都翻过来,如果是L,就把这一步左边所有牌都翻过来,这样先把所有牌编号和状态都对应好了,这一步不难。

然后再处理牌的上下顺序,这一步就要用到栈了,因为每次翻牌牌的顺序都会完全翻过来,所以用两个栈,每翻一次就翻到另一个空栈里去,因为这题左边右边都在翻,所以我开了四个栈,左边两个右边两个,左边翻的时候就把左边非空栈里的内容一个一个移到左边的空栈里,这样就模拟了翻牌的过程,右边也是一样处理。这样到最后就是左边一堆牌,右边一堆牌(左边剩一个非空栈,右边剩一个非空栈),然后再考虑最后一步是左翻还是右翻,左翻就把左边栈里的清到右边栈里,右翻反之。最后剩下的一个栈就是模拟的翻完之后的顺序了。然后开一个数组再把这个栈里的元素按顺序存在数组里以方便查找,这样四个栈也都清空了,每次跑循环不必再刻意去清空了。

这样状态与顺序都排好了放进了数组里,再问哪一个顺序的牌,直接把数组拉出来cout就可以了,下面是我写的代码,有点长,其实思路挺简短= =就是再判断是不是空栈的时候我一直再用if else所以排的情况太多了导致了代码太长......

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
char zt[];
char cz[];
int a[];
int res[];
stack<int>cardl1;
stack<int>cardl2;
stack<int>cardr1;
stack<int>cardr2; int main()
{
int N,n;
int k=;
int r,l,t;
int i,j;
while(scanf("%d",&N)!=EOF)
{
if(N==)
break;
k++;
scanf("%s",zt);
scanf("%s",cz);
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
}
cout<<"Pile "<<k<<endl;
cardl1.push();
cardr1.push(N);
r=N-;
l=;
for(i=;i<N-;i++)
{
if(cz[i]=='R')
{
for(j=r;j<N;j++)
{
if(zt[j]=='U')
zt[j]='D';
else
zt[j]='U';
}
r=r-;
if(i==N-)
break;
if(cardr2.empty())
{
cardr2.push(r+);
while(!cardr1.empty())
{
t=cardr1.top();
cardr1.pop();
cardr2.push(t);
}
}
else
{
cardr1.push(r+);
while(!cardr2.empty())
{
t=cardr2.top();
cardr2.pop();
cardr1.push(t);
}
}
}
else
{
for(j=l;j>=;j--)
{
if(zt[j]=='U')
zt[j]='D';
else
zt[j]='U';
}
l=l+;
if(i==N-)
break;
if(cardl2.empty())
{
cardl2.push(l+);
while(!cardl1.empty())
{
t=cardl1.top();
cardl1.pop();
cardl2.push(t);
}
}
else
{
cardl1.push(l+);
while(!cardl2.empty())
{
t=cardl2.top();
cardl2.pop();
cardl1.push(t);
}
}
}
}
//cout<<zt<<endl;
//while(!cardl2.empty())
//{
// cout<<cardl2.top()<<endl;
// cardl2.pop();
//}
if(!cardl2.empty())
{
if(!cardr2.empty())
{
if(cz[N-]=='R')
{
while(!cardr2.empty())
{
t=cardr2.top();
cardr2.pop();
cardl2.push(t);
}
for(i=;!cardl2.empty();i++)
{
res[i]=cardl2.top();
cardl2.pop();
}
}
else
{
while(!cardl2.empty())
{
t=cardl2.top();
cardl2.pop();
cardr2.push(t);
}
for(i=;!cardr2.empty();i++)
{
res[i]=cardr2.top();
cardr2.pop();
}
}
}
else
{
if(cz[N-]=='R')
{
while(!cardr1.empty())
{
t=cardr1.top();
cardr1.pop();
cardl2.push(t);
}
for(i=;!cardl2.empty();i++)
{
res[i]=cardl2.top();
cardl2.pop();
}
}
else
{
while(!cardl2.empty())
{
t=cardl2.top();
cardl2.pop();
cardr1.push(t);
}
for(i=;!cardr1.empty();i++)
{
res[i]=cardr1.top();
cardr1.pop();
}
}
}
}
else
{
if(!cardr2.empty())
{
if(cz[N-]=='R')
{
while(!cardr2.empty())
{
t=cardr2.top();
cardr2.pop();
cardl1.push(t);
}
for(i=;!cardl1.empty();i++)
{
res[i]=cardl1.top();
cardl1.pop();
}
}
else
{
while(!cardl1.empty())
{
t=cardl1.top();
cardl1.pop();
cardr2.push(t);
}
for(i=;!cardr2.empty();i++)
{
res[i]=cardr2.top();
cardr2.pop();
}
}
}
else
{
if(cz[N-]=='R')
{
while(!cardr1.empty())
{
t=cardr1.top();
cardr1.pop();
cardl1.push(t);
}
for(i=;!cardl1.empty();i++)
{
res[i]=cardl1.top();
cardl1.pop();
}
}
else
{
while(!cardl1.empty())
{
t=cardl1.top();
cardl1.pop();
cardr1.push(t);
}
for(i=;!cardr1.empty();i++)
{
res[i]=cardr1.top();
cardr1.pop();
}
}
}
}
//for(i=0;i<N;i++)
//{
// cout<<res[i]<<endl;
//}
for(i=;i<n;i++)
{
cout<<"Card "<<a[i]<<" is a face ";
if(zt[res[a[i]-]-]=='U')
cout<<"up ";
else
cout<<"down ";
cout<<res[a[i]-]<<"."<<endl;
}
}
return ;
}

A出来之后和集训队里的大神讨论,这题他用的数组模拟写起来要比我的方法快= ="一般的用数组模拟栈就是int stk[MAXN],top;压栈的话,比如压个1就是 stk[top++]=1;退栈就是a=stk[--top];"以上大神原话→_→

HDU 3328 Flipper 栈 模拟的更多相关文章

  1. HDU 3328 Flipper

    题解:直接建n个栈,模拟过程即可…… #include <cstdio> #include <cstring> #include <stack> using nam ...

  2. HDU 3328 Flipper (stack)

    最近着手打基础,做做STL的题目,虽然一般STL题目难度不大,但需要加快速度的准确率............................. 本题有N张牌,一开始每个位置一张(正面朝上或者朝下),有 ...

  3. HDU 1022 Train Problem I(栈模拟)

    传送门 Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...

  4. UVALive 7454 Parentheses (栈+模拟)

    Parentheses 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/A Description http://7xjob4.c ...

  5. UVALive 3486/zoj 2615 Cells(栈模拟dfs)

    这道题在LA是挂掉了,不过还好,zoj上也有这道题. 题意:好大一颗树,询问父子关系..考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE. 安心啦,这肯定是一道正常 ...

  6. poj1363Rails(栈模拟)

    主题链接: id=1363">啊哈哈,点我点我 思路: 这道题就是一道简单的栈模拟. .. .我最開始认为难处理是当出栈后top指针变化了. .当不满足条件时入栈的当前位置怎么办.这时 ...

  7. 【LintCode·容易】用栈模拟汉诺塔问题

    用栈模拟汉诺塔问题 描述 在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子.要求盘子必须按照从小到大的顺序从上往下堆 (如:任意一个盘子,其必须堆在比它大的盘子上面).同时, ...

  8. 51Nod 1289 大鱼吃小鱼 栈模拟 思路

    1289 大鱼吃小鱼 栈模拟 思路 题目链接 https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289 思路: 用栈来模拟 ...

  9. Code POJ - 1780(栈模拟dfs)

    题意: 就是数位哈密顿回路 解析: 是就算了...尼玛还不能直接用dfs,得手动开栈模拟dfs emm...看了老大半天才看的一知半解 #include <iostream> #inclu ...

随机推荐

  1. Atitit 游戏引擎---物理系统(1)------爆炸效果

    Atitit 游戏引擎---物理系统(1)------爆炸效果 1.1. 动画框架的来源flex,jqueryuijs,anim , cocos2d 1 1.2. Jqueryui的特效库 1 1.3 ...

  2. React(一)基础点

    prop实例 <div id="app"></div> <script src="bower_components/react/react. ...

  3. 总结整理 -- python系列

    python系列 python--基础学习(一)开发环境搭建,体验HelloWorld python--基础学习(二)判断 .循环.定义函数.继承.调用 python--基础学习(三)字符串单引号.双 ...

  4. jQuery.Deferred 源码分析

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong ) 1 引子 观察者模式是我们日常开发中经常用的模式.这个模式由两个主要部分组成:发布者和观察者.通过观察者模式, ...

  5. 【知识积累】爬虫之网页乱码解决方法(gb2312 -> utf-8)

    前言 今天在测试爬虫项目时,发现了一个很严肃的问题,当爬取的网页编码格式为gb2312时,按照一般的办法转化为utf-8编码时总是乱码,PS:爬取的所有网页无论何种编码格式,都转化为utf-8格式进行 ...

  6. Windows Azure Cloud Service (44) 将Cloud Service加入Virtual Network Subnet,并固定Virtual IP Address(VIP)

    <Windows Azure Platform 系列文章目录> 在之前的文章中,笔者已经详细介绍了如何将Virtual Machine加入Virtual Network,并且绑定固定的Pr ...

  7. 在SQL Server 2016里使用查询存储进行性能调优

    作为一个DBA,排除SQL Server问题是我们的职责之一,每个月都有很多人给我们带来各种不能解释却要解决的性能问题. 我就多次听到,以前的SQL Server的性能问题都还好且在正常范围内,但现在 ...

  8. LeetCode - 50. Pow(x, n)

    50. Pow(x, n) Problem's Link ----------------------------------------------------------------------- ...

  9. 利用chrome调试JavaScript代码

    看见网上很多人问怎么用chrome调试JavaScript代码,我也对这个问题抱着疑问,但是没有找到一篇能用的中文文章(可能我的google有问题),也不知道怎么点出一篇E文的,感觉作者写得不错,所以 ...

  10. Dapper小型ORM的使用(随便吐槽下公司)

    近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~).用来用去都觉的有一 ...