最近着手打基础,做做STL的题目,虽然一般STL题目难度不大,但需要加快速度的准确率.............................

本题有N张牌,一开始每个位置一张(正面朝上或者朝下),有N-1个操作,每次操作从有牌的最左边或者最右边,将那堆的牌由上到下依次翻转到旁边的那堆之中,操作结束,最后只剩一堆。

在那一堆中执行Q次询问,由上到下,第几张牌初始状态的编号以及它现在是朝上还是朝下。

直接开N个stack存好所有堆的状态......模拟操作即可。

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include<functional>
  5. #include <cstdio>
  6. #include <cstdlib>
  7. #include <cstring>
  8. #include <string>
  9. #include <vector>
  10. #include <set>
  11. #include <queue>
  12. #include <stack>
  13. #include <climits>//形如INT_MAX一类的
  14. #define MAX 100005
  15. #define INF 0x7FFFFFFF
  16. using namespace std;
  17.  
  18. int s[111][111];
  19. int head[111];
  20. int n,q;
  21. int numl,numr,final;
  22. char sta[111];
  23. char op[111];
  24. void init() {
  25. memset(s,0,sizeof(s));
  26. memset(head,0,sizeof(head));
  27. numl = 0; numr = 0;
  28. }
  29.  
  30. void solve() {
  31. for(int i=1; i<=n; i++) {
  32. s[i][0] = i;
  33. }
  34. int len = strlen(op);
  35. int right , left;
  36. for(int i=0; i<len; i++) {
  37. if(op[i] == 'R') {
  38. numr ++;
  39. left = n - numr;
  40. right = left + 1;
  41. while(head[right] > -1) {
  42. s[left][++head[left]] = s[right][head[right]--];
  43. }
  44. } else {
  45. numl ++;
  46. left = numl;
  47. right = left + 1;
  48. while(head[left] > -1) {
  49. s[right][++head[right]] = s[left][head[left]--];
  50. }
  51. }
  52. }
  53. }
  54.  
  55. bool judge(int x,int y) {
  56. int span = abs(x - y);
  57. if(span % 2 == 1) {
  58. if(sta[y-1] == 'U') sta[y-1] = 'D';
  59. else sta[y-1] = 'U';
  60. }
  61. if(sta[y-1] == 'U') return 1;
  62. return 0;
  63. }
  64. int main() {
  65. int a;
  66. int ca = 1;
  67. while(scanf("%d",&n) && n) {
  68. init();
  69. scanf("%s",sta);
  70. scanf("%s",op);
  71. scanf("%d",&q);
  72. solve();
  73. final = 1 + numl;
  74. printf("Pile %d\n",ca++);
  75. for(int i=0; i<q; i++) {
  76. scanf("%d",&a);
  77. printf("Card %d is a ",a);
  78. if(judge(final,s[final][n - a]) == 0)printf("face down %d.\n",s[final][n - a]);
  79. else printf("face up %d.\n",s[final][n - a]);
  80. }
  81. }
  82. return 0;
  83. }

HDU 3328 Flipper (stack)的更多相关文章

  1. HDU 5934 Bomb(炸弹)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  2. Java的堆(Heap)和栈(Stack)的区别

    Java中的堆(Heap)是一个运行时数据区,用来存放类的对象:栈(Stack)主要存放基本的数据类型(int.char.double等8种基本数据类型)和对象句柄. 例1 int a=5; int ...

  3. HDU 5734 Acperience(返虚入浑)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  4. HDU 5724 Chess(国际象棋)

    HDU 5724 Chess(国际象棋) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  5. HDU 5826 physics(物理)

     physics(物理) Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   D ...

  6. HDU 5835 Danganronpa(弹丸论破)

     Danganronpa(弹丸论破) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  7. [置顶] ※数据结构※→☆线性表结构(stack)☆============栈 序列表结构(stack sequence)(六)

    栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据.栈 ...

  8. PHP实现栈(Stack)数据结构

    栈(Stack),是一种特殊的后进先出线性表,其只能在一端进行插入(插入一般称为压栈.进栈或入栈)和删除(删除一般称为弹栈.退栈或出栈)操作,允许进行插入和删除操作的一端称为栈顶,另一端则称为栈底.栈 ...

  9. C# 堆栈(Stack)和队列(Queue)

    一.什么是堆?(Heap)      堆是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收.      是程序运行期 ...

随机推荐

  1. android FragmentPagerAdapter的“标准”配置

    private class ImagePagerAdapter extends FragmentPagerAdapter {           public List<ImageItem> ...

  2. android取得所在位置的经纬度

    android提供了LocationManager来取得位置,用LocationListener来监听位置的变化 先做一些初始化工作: /** latitude and longitude of cu ...

  3. ASP.NET路由

    ASP.NET 路由使您可以使用不必映射到网站中特定文件的 URL. 由于该 URL 不必映射到文件,因此可以使用对用户操作进行描述因而更易于被用户理解的 URL. ASP.NET MVC 框架和 A ...

  4. 从数据库中,绑定JQuery Accordion控件---Repeater control

    http://aspsnippets.com/Articles/jQuery-Accordion-example-in-ASPNet-using-C-and-VBNet.aspx 1. 添加JQuer ...

  5. 【Oracle】number类型保留小数位

    SQL> SELECT TO_CHAR(, '9990.00') A, TO_CHAR(5.8, '9990.00') B, TO_CHAR(., '9990.00') C FROM dual; ...

  6. MySQL无法使用、导入中文数据乱码

    1,新版的MySQL无法使用 装的新版的mysql-installer-community-5.6.14.0.msi,无法使用(无法导入地图数据,卸载重装mysql_5.6.13.msi,无法启动). ...

  7. django-extensions

    命令行: admin后台管理扩展 后面会出现个放大镜实现搜索补齐功能. 交互式的 Python Shells(shell_plus) 实现自动导入 如果遇到apps中包含的的models名字出现冲突, ...

  8. Qt Chart 5.7.0 傻瓜安装教程

    前提 qtchart 里的README文件(注意红色标记处)(本人翻译不行.多多见谅,也可以在评论里纠正( ⊙ o ⊙ )) --------------- Qt Charts 5.7.0 ----- ...

  9. java入门(1) 程序运行机制及运行过程

    首先我们来看一下java程序在底层是怎么工作的: JAVA有两种核心机制: Java虚拟机(Java Virtual Machine): 1.java虚拟机可以理解成一个以字节码为机器指令的CPU. ...

  10. SolrCloud Hello Word

    Solr Cloud 设计出来的目的是使你的搜索服务具有更高的可用性,提高容错.容灾能力.下面我们在一台电脑上建立2个solr服务,作为一个solrCloud分片(shard),初步认识一下solrC ...