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:

a1        a2    ...        aN

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

    -9     -7     -2    2     -3     -2     -1    1    2    3    7    9

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(栈)的更多相关文章

  1. ACM学习历程——UVA11234 Expressions(栈,队列,树的遍历,后序遍历,bfs)

    Description   Problem E: Expressions2007/2008 ACM International Collegiate Programming Contest Unive ...

  2. ACM学习历程——UVA 127 "Accordian" Patience(栈;模拟)

    Description  ``Accordian'' Patience  You are to simulate the playing of games of ``Accordian'' patie ...

  3. ACM学习历程——UVA442 Matrix Chain Multiplication(栈)

    Description   Matrix Chain Multiplication  Matrix Chain Multiplication  Suppose you have to evaluate ...

  4. ACM学习历程——UVA127 "Accordian" Patience(栈, 链表)

    Description  ``Accordian'' Patience  You are to simulate the playing of games of ``Accordian'' patie ...

  5. 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 ...

  6. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告

  7. ACM学习历程—HDU 5512 Pagodas(数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是给了初始的集合{a, b},然后取集合里 ...

  8. ACM学习历程—HDU5521 Meeting(图论)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是一个人从1开始走,一个人从n开始走.让最 ...

  9. ACM学习历程—HDU2476 String painter(动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...

随机推荐

  1. 加入 centos 右键 terminal

    centos6.2以上默认右键都没有terminal,现加入方法 例如以下 1>  yum -y install nautilus-open-terminal 2> shutdown -r ...

  2. 汉字unicode码表范围和常用汉字unicode码

    utf-8吗表中所有汉字的区间的正则表达式[\u4e00-\u9fa5] 汉字常用字unicode吗表String base ="\u7684\u4e00\u4e86\u662f\u6211 ...

  3. ASP.NET数据库连接字符串的加密与解密

    ASP.NET web.config中,数据库连接字符串的加密与解密. 虽然不怎么新鲜,但相信还是有许多人不知道,好,不说废话,直接给方法:开始--->运行,输入cmd,接着输入以下内容 加密: ...

  4. nginx could not build the server_names_hash 解决方法

    nginx “nginx could not build the server_names_hash”解决方法 给一个服务器下增加了一些站点别名,差不多有20多个. 重启nginx时候,提示: cou ...

  5. TOML简介 (转)

    TOML的由来 配置文件的使用由来已久,从.ini.XML.JSON.YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升. TOML是前GitHub CEO, Tom Prest ...

  6. 13-redis主从复制

    一:redis主从复制 (1)配置要求 一台主maste 二台从slave (2)架构图 (3)配置流程 1:分配拷贝2份redis.conf 分别命名为 redis6380.conf redis63 ...

  7. 关于msbuild 编译.net 4.5新语法错误的解决方法

    .net4.5以前msbuild 是在%windir%/Microsoft.NET/FrameworkXX/vXX目录下,如:C:\Windows\Microsoft.NET\Framework64\ ...

  8. U盘中毒变成exe快捷键文件不见问题

    大家好,大家能够叫我阿胜,今天给我大家带一个有用小方法,希望对大家有帮助.去学校打印社打印东西,U盘中病毒,使U盘文件所有变成快捷键了,这个坑爹的打印社.这时我该怎么办......    嘿嘿.阿胜给 ...

  9. node / npm/ yarn 的安装以及环境变量

    # node.js 10.15.3 https://npm.taobao.org/mirrors/node/v10.15.3/node-v10.15.3-x64.msi 1.安装后自动添加了环境变量: ...

  10. 可视化工具与pymongo

    可视化工具 链接:https://robomongo.org/ pymongo 官网:http://api.mongodb.com/python/current/tutorial.html from ...