UVA 11111-Generalized Matrioshkas(栈)
题意:有很多层盒子,盒子里面再套盒子,一个盒子可能套多个独立的子盒子,但子盒子的总体积必须小于该盒子,否则不合法,输入给一行数,负数代表左边,正数代表右边,大小表示其体积,如-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,否则不合法。
代码如下:
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<iterator>
#include<utility>
#include<sstream>
#include<iostream>
#include<cmath>
#include<stack>
using namespace std;
const int INF=1000000007;
const double eps=0.00000001;
int go;
int my_stack[40000],leave[40000],elem[40000]; //栈,leave[]代表该盒子剩余容量
bool solve()
{
int rear=0;
memset(leave,0,sizeof(leave));
leave[0]=INF;
for(int i=0;i<go;i++) //扫一遍
{
if(elem[i]<0) //小于0则添加到栈中
{
rear++;
my_stack[rear]=abs(elem[i]);
leave[rear]=abs(elem[i]); //此时的leave[]就等于他的值
}
else
{
if(rear==0) return false; //还未扫完就栈空
if(elem[i]!=my_stack[rear]) return false; //与栈顶元素不相同
if(elem[i]>=leave[rear-1]) return false; //大于或等于大盒子的leave[]
leave[rear-1]-=elem[i]; //减掉
rear--; //出栈
}
}
return rear==0; //最后还要判断是否栈空
}
int main()
{
string line;
while(getline(cin,line))
{
istringstream output(line); //字符串流输入,这样比较方便
int a;
go=0;
while(output>>a)
{
elem[go++]=a;
}
if(go%2){ printf(":-( Try again.\n"); continue; } //不是偶数肯定不合法
if(solve()) printf(":-) Matrioshka!\n");
else printf(":-( Try again.\n");
}
return 0;
}
UVA 11111-Generalized Matrioshkas(栈)的更多相关文章
- UVa 11111 Generalized Matrioshkas
嵌套玩具, 要求外层玩具的尺寸比内层玩具尺寸的和要大. 每一个玩具由一个负数与相应的正数表示, 在这两数之间的部分即为此玩具内部的玩具. 要求判断一串输出的数字是否能组成一个合法的玩具. 一个合法的玩 ...
- ACM学习历程——UVA11111 Generalized Matrioshkas(栈)
Description Problem B - Generalized Matrioshkas Problem B - Generalized Matrioshkas Vladimir wo ...
- UVa 514 Rails(经典栈)
Rails There is a famous railway station in PopPush City. Country there is incredibly hilly. The st ...
- UVA 673 Parentheses Balance (栈)
题意描述: 给出一段只包含()和[]的字符串,判断是否合法,合法输出YES,不合法输出NO 规则: 1.该串为空,则合法 2.若A合法,B合法,则AB合法 3.若A合法,则(A)和[A]均合法 解题思 ...
- UVa 514 Rails(栈的应用)
题目链接: https://cn.vjudge.net/problem/UVA-514 /* 问题 输入猜测出栈顺序,如果可能输出Yes,否则输出No 解题思路 貌似没有直接可以判定的方法,紫书上给出 ...
- UVA ~ 514 ~ Rails (栈)
参考:https://blog.csdn.net/ZscDst/article/details/80266639 #include <iostream> #include <cstd ...
- UVA Stacks of Flapjacks 栈排序
题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成.给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假 ...
- UVA - 514 Rails(栈模拟)
题目: 给出一个序列,问将1,2,3,4……按从小到大的顺序入栈,能否得到给出的序列. 思路: 用stack模拟就可以了. 当前的cnt如果小于a[i],就将cnt入栈,否则就判断栈顶是不是和a[i] ...
- UVA - 10410 Tree Reconstruction(栈处理递归)
题目: 给出一棵树的BFS和DFS序列,输出这棵树中每个结点的子结点列表.BFS和DFS序列在生成的时候,当一个结点被扩展时,其所有子结点应该按照编号从小 到大的顺序访问. 思路: 一开始是想根据BF ...
随机推荐
- hdu 5675 ztr loves math(数学技巧)
Problem Description ztr loves research Math.One day,He thought about the "Lower Edition" o ...
- Struts2+Spring+Hibernate 三大框架的合并集成
这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样. 首先看一 ...
- PPT去掉图片白色背景
双击图片,点击菜单栏“删除背景”,用矩形框选中想要的区域,然后将鼠标焦点移到图片外,单击鼠标即可.
- C++模板 静态成员 定义(实例化)
问一个问题: 考虑一个模板: template <typename T> class Test{ public: static std::string info; }; 对于下面若干种定义 ...
- js获取某个标签中的信息
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Java Timer触发定时器
XML: <!-- Java Timer定时 --> <!-- <bean id="shortUrlTask" class=" com.sprin ...
- NSBundle 类
NSBundle NSBundle继承于NSObject,NSBundle是一个程序包,其中包含了程序会使用的资源(图像,声音,编辑好的代码,nib文件). 一. 初始化NSBundle + (ins ...
- QT TCP/IP
QT 网络通信(TCP/IP) 服务端: 一.监听新的客户端接入(QTcpServer) 重写函数 incomingConnection(qintptr socketDescriptor) 二.服务端 ...
- 我的django之旅(一)
我的django之旅(一) 标签(空格分隔):django web 1.检验我们的python和django版本 liao@spring ~ $ python --version Python 2.7 ...
- 【转载】solr教程,值得刚接触搜索开发人员一看
转载:http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍 ...