UVA 11111-Generalized Matrioshkas(棧)

來源:互聯網
上載者:User

標籤:

題意:有很多層盒子,盒子裡面再套盒子,一個盒子可能套多個獨立的子盒子,但子盒子的總體積必須小於該盒子,否則不合法,輸入給一行數,負數代表左邊,正數代表右邊,大小表示其體積,如-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(棧)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.