题意:有很多层盒子,盒子里面再套盒子,一个盒子可能套多个独立的子盒子,但子盒子的总体积必须小于该盒子,否则不合法,输入给一行数,负数代表左边,正数代表右边,大小表示其体积,如-2,-1,1,2则表示体积为2的盒子里套一个体积为1的盒子,再比如-5,-2,2,-1,1,5表示体积为5的盒子套两个盒子分别为2和1,题目要求判断给出的一行数是否合法。一定要保证子盒子的体积小于大盒子。比如-5,-4,4,-2,2,5就不合法。

解析:栈的使用,但同时维护另一个值,该盒子剩余能容纳的体积,比如该盒子的体积为5,已经有一个体积为3的盒子,减掉3后还剩2,如果还有子盒子,则子盒子的体积一定要小于2,否则不合法。

代码如下:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<string>
  4. #include<algorithm>
  5. #include<set>
  6. #include<map>
  7. #include<queue>
  8. #include<vector>
  9. #include<iterator>
  10. #include<utility>
  11. #include<sstream>
  12. #include<iostream>
  13. #include<cmath>
  14. #include<stack>
  15. using namespace std;
  16. const int INF=1000000007;
  17. const double eps=0.00000001;
  18. int go;
  19. int my_stack[40000],leave[40000],elem[40000]; //栈,leave[]代表该盒子剩余容量
  20. bool solve()
  21. {
  22. int rear=0;
  23. memset(leave,0,sizeof(leave));
  24. leave[0]=INF;
  25. for(int i=0;i<go;i++) //扫一遍
  26. {
  27. if(elem[i]<0) //小于0则添加到栈中
  28. {
  29. rear++;
  30. my_stack[rear]=abs(elem[i]);
  31. leave[rear]=abs(elem[i]); //此时的leave[]就等于他的值
  32. }
  33. else
  34. {
  35. if(rear==0) return false; //还未扫完就栈空
  36. if(elem[i]!=my_stack[rear]) return false; //与栈顶元素不相同
  37. if(elem[i]>=leave[rear-1]) return false; //大于或等于大盒子的leave[]
  38. leave[rear-1]-=elem[i];  //减掉
  39. rear--; //出栈
  40. }
  41. }
  42. return rear==0; //最后还要判断是否栈空
  43. }
  44. int main()
  45. {
  46. string line;
  47. while(getline(cin,line))
  48. {
  49. istringstream output(line); //字符串流输入,这样比较方便
  50. int a;
  51. go=0;
  52. while(output>>a)
  53. {
  54. elem[go++]=a;
  55. }
  56. if(go%2){ printf(":-( Try again.\n"); continue; } //不是偶数肯定不合法
  57. if(solve()) printf(":-) Matrioshka!\n");
  58. else printf(":-( Try again.\n");
  59. }
  60. return 0;
  61. }

UVA 11111-Generalized Matrioshkas(栈)的更多相关文章

  1. UVa 11111 Generalized Matrioshkas

    嵌套玩具, 要求外层玩具的尺寸比内层玩具尺寸的和要大. 每一个玩具由一个负数与相应的正数表示, 在这两数之间的部分即为此玩具内部的玩具. 要求判断一串输出的数字是否能组成一个合法的玩具. 一个合法的玩 ...

  2. ACM学习历程——UVA11111 Generalized Matrioshkas(栈)

    Description   Problem B - Generalized Matrioshkas   Problem B - Generalized Matrioshkas  Vladimir wo ...

  3. UVa 514 Rails(经典栈)

     Rails  There is a famous railway station in PopPush City. Country there is incredibly hilly. The st ...

  4. UVA 673 Parentheses Balance (栈)

    题意描述: 给出一段只包含()和[]的字符串,判断是否合法,合法输出YES,不合法输出NO 规则: 1.该串为空,则合法 2.若A合法,B合法,则AB合法 3.若A合法,则(A)和[A]均合法 解题思 ...

  5. UVa 514 Rails(栈的应用)

    题目链接: https://cn.vjudge.net/problem/UVA-514 /* 问题 输入猜测出栈顺序,如果可能输出Yes,否则输出No 解题思路 貌似没有直接可以判定的方法,紫书上给出 ...

  6. UVA ~ 514 ~ Rails (栈)

    参考:https://blog.csdn.net/ZscDst/article/details/80266639 #include <iostream> #include <cstd ...

  7. UVA Stacks of Flapjacks 栈排序

    题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成.给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假 ...

  8. UVA - 514 Rails(栈模拟)

    题目: 给出一个序列,问将1,2,3,4……按从小到大的顺序入栈,能否得到给出的序列. 思路: 用stack模拟就可以了. 当前的cnt如果小于a[i],就将cnt入栈,否则就判断栈顶是不是和a[i] ...

  9. UVA - 10410 Tree Reconstruction(栈处理递归)

    题目: 给出一棵树的BFS和DFS序列,输出这棵树中每个结点的子结点列表.BFS和DFS序列在生成的时候,当一个结点被扩展时,其所有子结点应该按照编号从小 到大的顺序访问. 思路: 一开始是想根据BF ...

随机推荐

  1. ASP.NET MVC3 系列教程 – 新的Layout布局系统

    原文地址:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html I:回忆MVC2当中MasterPage ...

  2. Gym 100570E : Palindrome Query

    De Prezer loves palindrome strings. A string s1s2...sn is palindrome if and only if it is equal to i ...

  3. 诺心(LECAKE) | 氪加

    诺心(LECAKE) | 氪加 诺心(LECAKE)

  4. 使用dojo的tree

    dojo的Tree非常是灵活,可是官方站点上的样例却非常少,并且也比較分散,兴许将持续完好本样例. 总的来说,要使用tree,要接触到三个类:"dojo/store/JsonRest&quo ...

  5. ACM-简单题之Ignatius and the Princess II——hdu1027

    转载请注明出处:http://blog.csdn.net/lttree Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Othe ...

  6. [转]Asp.Net调用前台js调用后台代码分享

    1.C#前台js调用后台代码 前台js <script type="text/javascript" language="javascript"> ...

  7. xUtils的文件下载与安装,xUtils的文件上传

    开篇报错注意:本教程是基于xUtils-2.6.14.jar版本实现的 由于studio中6.0以后安卓取消了httpclient,而xutils则基于httpclient开发的,所以现在无法使用,将 ...

  8. Comparator和Comparable在排序中的应用

    http://blog.csdn.net/iisgirl/article/details/7269833

  9. OD调试1--第一个win32程序

    OD调试一:第一个Win32程序的修改 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误.而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果.由于 ...

  10. Webform用户控件

    用户控件一 用户控件二