ACM学习历程——UVA11111 Generalized Matrioshkas(栈)
Description
Problem B - Generalized Matrioshkas
| Problem B - Generalized Matrioshkas |
Vladimir worked for years making matrioshkas, those nesting dolls that certainly represent truly Russian craft. A matrioshka is a doll that may be opened in two halves, so that one finds another doll inside. Then this doll may be opened to find another one inside it. This can be repeated several times, till a final doll -that cannot be opened- is reached.
Recently, Vladimir realized that the idea of nesting dolls might be generalized to nesting toys. Indeed, he has designed toys that contain toys but in a more general sense. One of these toys may be opened in two halves and it may have more than one toy inside it. That is the new feature that Vladimir wants to introduce in his new line of toys.
Vladimir has developed a notation to describe how nesting toys should be constructed. A toy is represented with a positive integer, according to its size. More precisely: if when opening the toy represented by m we find the toys represented by n1, n2, ..., nr, it must be true that n1 + n2 + ... + nr < m. And if this is the case, we say that toy mcontains directly the toys n1, n2, ..., nr . It should be clear that toys that may be contained in any of the toys n1, n2, ..., nr are not considered as directly contained in the toy m.
A generalized matrioshka is denoted with a non-empty sequence of non zero integers of the form:
such that toy k is represented in the sequence with two integers - k and k, with the negative one occurring in the sequence first that the positive one.
For example, the sequence
represents a generalized matrioshka conformed by six toys, namely, 1, 2 (twice), 3, 7 and 9. Note that toy 7 contains directly toys 2 and 3. Note that the first copy of toy 2 occurs left from the second one and that the second copy contains directly a toy 1. It would be wrong to understand that the first -2 and the last 2 should be paired.
On the other hand, the following sequences do not describe generalized matrioshkas:
-
-9 -7 -2 2 -3 -1 -2 2 1 3 7 9
because toy 2 is bigger than toy 1 and cannot be allocated inside it.
-
-9 -7 -2 2 -3 -2 -1 1 2 3 7 -2 2 9
because 7 and 2 may not be allocated together inside 9.
-
-9 -7 -2 2 -3 -1 -2 3 2 1 7 9
because there is a nesting problem within toy 3.
Your problem is to write a program to help Vladimir telling good designs from bad ones.
Input
The input file contains several test cases, each one of them in a separate line. Each test case is a sequence of non zero integers, each one with an absolute value less than 107.
Output
Output texts for each input case are presented in the same order that input is read.
For each test case the answer must be a line of the form
:-) Matrioshka!
if the design describes a generalized matrioshka. In other case, the answer should be of the form
:-( Try again.
Sample Input
-9 -7 -2 2 -3 -2 -1 1 2 3 7 9
-9 -7 -2 2 -3 -1 -2 2 1 3 7 9
-9 -7 -2 2 -3 -1 -2 3 2 1 7 9
-100 -50 -6 6 50 100
-100 -50 -6 6 45 100
-10 -5 -2 2 5 -4 -3 3 4 10
-9 -5 -2 2 5 -4 -3 3 4 9
Sample Output
:-) Matrioshka!
:-( Try again.
:-( Try again.
:-) Matrioshka!
:-( Try again.
:-) Matrioshka!
:-( Try again. 按照题目的意思,遵循以下:
1、负数直接入栈。
2、top为0直接入栈。
3、如果为正数:
1·、能与栈顶元素结合,让栈顶元素的ok值为1(ok值起始为0),并由负转正。正数值不入栈。
2·、能与栈顶第二个元素结合,而且可以容下栈顶ok元素(非ok不满足条件),弹出栈顶元素,此时栈顶元素ok值转1,由负转正。
3·、进行完上述过程,对连续的ok值进行结合。val值相加。
4·、对不能结合的正数,根据题目要求必然是坏值,可以入栈或者不入栈,对结果判断不影响。
4、最终只要栈中元素只有一个,并且其ok值为1,说明是好的;其余均是坏的。 代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <string>
#define inf 0x3fffffff
#define eps 1e-10 using namespace std; struct node
{
bool ok;
int val;
}; node Stack[10000];
int top; int Input()
{
int v;
char ch;
top = 0;
for (;;)
{
if (scanf("%d", &v) == EOF)
return -1;
ch = getchar();
if (v < 0)
{
Stack[top].ok = 0;
Stack[top].val = v;
top++;
}
else if (top == 0)
{
Stack[top].ok = 0;
Stack[top].val = v;
}
else if (Stack[top-1].val == -v)
{
Stack[top-1].ok = 1;
Stack[top-1].val = v;
}
else if (top > 1 &&
Stack[top-1].ok == 1 &&
Stack[top-2].val == -v &&
Stack[top-1].val < v)
{
top--;
Stack[top-1].ok = 1;
Stack[top-1].val = v;
}
while (top > 1 &&
Stack[top-1].ok == 1 &&
Stack[top-2].ok == 1)
{
Stack[top-2].val += Stack[top-1].val;
top--;
}
if (ch == '\n')
{
if (top == 1 && Stack[top-1].ok == 1)
return 1;
else
return 0;
}
}
} void qt()
{
int ans;
for (;;)
{
ans = Input();
if (ans == -1)
break;
if (ans == 0)
printf(":-( Try again.\n");
else
printf(":-) Matrioshka!\n");
}
} int main()
{
//freopen ("test.txt", "r", stdin);
qt();
return 0;
}
ACM学习历程——UVA11111 Generalized Matrioshkas(栈)的更多相关文章
- ACM学习历程——UVA11234 Expressions(栈,队列,树的遍历,后序遍历,bfs)
Description Problem E: Expressions2007/2008 ACM International Collegiate Programming Contest Unive ...
- ACM学习历程——UVA 127 "Accordian" Patience(栈;模拟)
Description ``Accordian'' Patience You are to simulate the playing of games of ``Accordian'' patie ...
- ACM学习历程——UVA442 Matrix Chain Multiplication(栈)
Description Matrix Chain Multiplication Matrix Chain Multiplication Suppose you have to evaluate ...
- ACM学习历程——UVA127 "Accordian" Patience(栈, 链表)
Description ``Accordian'' Patience You are to simulate the playing of games of ``Accordian'' patie ...
- ACM学习历程——ZOJ 3829 Known Notation (2014牡丹江区域赛K题)(策略,栈)
Description Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathema ...
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告
- ACM学习历程—HDU 5512 Pagodas(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是给了初始的集合{a, b},然后取集合里 ...
- ACM学习历程—HDU5521 Meeting(图论)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是一个人从1开始走,一个人从n开始走.让最 ...
- ACM学习历程—HDU2476 String painter(动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...
随机推荐
- Spring学习十一----------Bean的配置之基于Java的容器注解@Bean
© 版权声明:本文为博主原创文章,转载请注明出处 @Bean -@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/> -可 ...
- Splash动画启动app时空白屏
相信大多数人一开始都会对启动app的时候出现先白瓶或者黑屏然后才进入第一个界面,例如:SplashActivity.那这是什么原因造成的呢? <style name="Splash_T ...
- 栈(C++)
简介: 限定仅在表尾进行插入或删除操作的线性表 表尾端称为栈顶(top),表头端称为栈底(bottom) 特点: 在栈中,后入栈的元素先出栈 C语言版本 用于测试的文件,以及测试结果可以去作者GitH ...
- partition by和group by对比
今天大概弄懂了partition by和group by的区别联系. 1. group by是分组函数,partition by是分析函数(然后像sum()等是聚合函数): 2. 在执行顺序上, 以下 ...
- OpenCV 入门示例之五:一个复杂点的变换
前言 前文介绍了一个简单的变换.需要注意的是,很多时候,输出和输入图像的格式是不同的( 大小,深度,通道 ).在本文将展示的程序中,对图像进行了缩放( 使用cvPyrDown 函数 ),这种情况下需要 ...
- 【bootstrap】右侧sidebar不跟着内容滚动的异常
移动开发需要依赖于Web服务的接口,但是写这个接口文档实在是比较繁琐,所以今天我就写了个包解析程序自动生成接口文档. 内容显示我是借鉴Bootstrap的官方教程http://v3.bootcss.c ...
- Jquery获取iframe中的元素
iframe与父页面之间相互获取元素的方法: 1.从父页面中获取iframe页面中的元素: 用法: $(window.frames["iframe_include_adverse" ...
- VS2017快捷键
1.回到上一个光标位置/前进到下一个光标位置 (1)回到上一个光标位置:使用组合键“Ctrl + -”; (2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2.复制/剪切/删除整行 ...
- 数据结构---python---表
一.list的基本实现技术 在数据结构中,如果用python实现线性表,无疑要提到list,list是一种元素个数可变的线性表(而tuple是不变的表,不支持改变其内部状态的任何操作,其他与list性 ...
- 【BZOJ1835】[ZJOI2010]base 基站选址 线段树+DP
[BZOJ1835][ZJOI2010]base 基站选址 Description 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯 ...