嵌套玩具, 要求外层玩具的尺寸比内层玩具尺寸的和要大. 每一个玩具由一个负数与相应的正数表示, 在这两数之间的部分即为此玩具内部的玩具. 要求判断一串输出的数字是否能组成一个合法的玩具. 一个合法的玩具:
1. 数字代表了 toy 的尺寸大小.
2. 外层的 size 必须 > 内层 size 的和, 不能是 >=.
3. 每次必须是负正对一起出现.

 

思路:

用一个结构体代表玩具,成员变量为容量和内部和(即嵌套在内部的元素和)

负数:

  1. 如果压栈元素大于外层容量,失败
  2. 计算外层的内部和,如果内部和大于容量,也失败
  3. 否则可以压栈

正数:

  1. 出栈并判断是否匹配

最后,如果栈为空,则成功

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<stack>
#include<algorithm>
#include<sstream>
using namespace std; struct toy
{
toy(int value, int inner_sum):v(value), sum(inner_sum) {}
//容量
int v;
//内部和
int sum;
}; bool solve(string & line)
{
//cout<<line<<endl;
istringstream iss(line);
int x;
stack<toy> st;
while(iss>>x)
{
//小于0压栈
if(x<0)
{
x=abs(x);
//非最外层
if(!st.empty())
{
//内层大于外层
if(st.top().v<x)
return false;
//统计内层的元素和,如果大于等于外层容量,返回失败
st.top().sum+=x;
if(st.top().sum>=st.top().v)
return false;
}
st.push(toy(x, 0));
}
//大于0弹栈,并判断是否匹配
else
{
if(st.empty())
return false; int y=st.top().v; st.pop();
if(x!=y)
return false; }
} return st.empty();
} int main()
{
string line;
while(getline(cin, line))
{
if(solve(line))
cout<<":-) Matrioshka!"<<endl;
else
cout<<":-( Try again."<<endl; } return 0;
}

最新文章

  1. how to use panda
  2. 【C#进阶系列】12 泛型
  3. vs2010 使用vs online账号 需要安装的插件
  4. iOS新加速计事件(陀螺仪和加速计)
  5. 【Spring】Spring系列1之Spring概述
  6. WCF 采用net.tcp协议实践
  7. Pig Run on Hadoop, V1.0
  8. 《大数据Spark企业级实战 》
  9. C#打包时设置图标ico错误
  10. Cenos 6.5上的subverion的yum配置笔记
  11. zsh: command not found: conda的一种解决方法
  12. Java接口实现传参
  13. java中的异常处理问题。
  14. SKlearn库学习曲线
  15. WebService技术,服务端发布到Tomcat(使用Servlet发布),客户端使用axis2实现(二)
  16. Flexbox的布局
  17. ABAP-Generate dynpro动态屏幕
  18. 使用zookeeper自带的zkCli.sh客户端工具实现对zk的CURD常见操作详解
  19. 深入理解php中的ini配置(2)
  20. Connections between cities HDU - 2874(最短路树 lca )

热门文章

  1. BrowserSync,调试利器--自动刷新(转
  2. apache开源项目--mina
  3. #include&lt;unistd.h&gt;头文件的理解
  4. noip2004提高组题解
  5. 【转】APUE习题4.6---测试lseek作用
  6. android学习笔记五
  7. ECSHOP seo修改建议
  8. windows各种程序中文显示乱码又找不到原因时
  9. 关于duilib中的list的扩展探索
  10. 关于SecureCRT的安装和破解问题以及xp系统的串口问题