ACM學習曆程——UVA11111 Generalized Matrioshkas(棧)

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   ar   color   os   sp   

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-10using 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(棧)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.