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 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...
 
随机推荐
- nodejs 简单的备份github代码初版
			
传送门:http://www.jianshu.com/p/002efed0d3af 我的代码: const https = require('https'); const fs = require(& ...
 - Spring学习三----------注入方式
			
© 版权声明:本文为博主原创文章,转载请注明出处 Spring注入方式 本篇博客只讲最常用的两种注入方式:设值注入和构造器注入.代码为完整代码,复制即可使用. 1.目录结构 2.pom.xml < ...
 - python tkinter module的用法
			
tkinter windows下从python3.2版本之后是自动安装的. python3.3之后的引入方式: >>> import _tkinter>>> imp ...
 - u-boot-2014.04分析
			
本文档以smdk2410为例初步分析了u-boot-2014.04的配置.启动流程.代码重定向.内存分布. u-boot-2014.04这个版本的uboot从Linux内核中借鉴了很多东西,比如编译u ...
 - centOS下安装ejabberd
			
#centos (安装依赖项) sudo yum -y groupinstall "Development Tools"sudo yum -y install openssl op ...
 - 一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬
			
消息队列 为什么写这篇文章? 博主有两位朋友分别是小A和小B: 小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑.再不然就是和运营聊聊天,写几个SQL, ...
 - 用变量a给出下面的定义。[中国台湾某著名CPU生产公司2005年面试题]
			
(1)一个整型数(An integer)(2)一个指向整型数的指针(A pointer to an integer)(3)一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a ...
 - 【BZOJ4240】有趣的家庭菜园 树状数组+贪心
			
[BZOJ4240]有趣的家庭菜园 Description 对家庭菜园有兴趣的JOI君每年在自家的田地中种植一种叫做IOI草的植物.JOI君的田地沿东西方向被划分为N个区域,由西到东标号为1~N.IO ...
 - 解决Ubuntu(乌班图)vi/vim模式下粘贴的代码内容会多出的空格的问题
			
vi/vim模式下的粘贴 因为linux系统和win系统的差异性,有时候在win环境运行的python代码会放在Linux系统上执行,这个时候就需要把win系统上IDE上的代码copy下来,在Linu ...
 - Python爬虫-- PyQuery库
			
PyQuery库 PyQuery库也是一个非常强大又灵活的网页解析库,PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎完全相同,所以不用再去费心去记一些奇怪 ...