题意:就是说一个娃娃肚子里只能放比它小的娃娃,输入一组数后,看看是否符合条件。
思路:这个题得预判剩余空间,所以用了两个栈来,一 个 q 储存输入数值,一个 p 储存剩余空间。如果是负数,就入q,上一个数减去这个数就是剩余空间(此处正负值自己算,这里只说思路),遇到正数,就比较绝对值………………依次出栈,进栈。。。说这么多,看代码直接就清楚了!!!
#include <iostream>
#include<stdio.h>
#include<stack>
#include<stdlib.h>
#include<math.h>
#include<string.h>
using namespace std;
int a[10000003];
int st;
int solve()
{
int i;
stack<int >q,p;
for(i=0;i<st;i++)
{
if(a[i]<0)
{
if(q.size()>=1)
{
if(p.top()<=abs(a[i]))
return 1;
int temp=p.top()-abs(a[i]);
p.pop();
p.push(temp);
}
p.push(abs(a[i]));
q.push(a[i]);
}
else
{
if(q.empty())
return 1;
if(abs(q.top())!=a[i])
return 1;
q.pop();
p.pop();
}
}
return 0;
}
int main()
{
int t;
char ch;
st=0;
while(scanf("%d%c",&t,&ch)!=EOF)
{
a[st++]=t;
if(ch=='\n')
{
if(st%2)
printf(":-( Try again.\n");
else
{
int flag=solve();
if(flag)
printf(":-( Try again.\n");
else
printf(":-) Matrioshka!\n");
}
st=0;
}
}
return 0;
}