从一个栈中栈顶开始找距离小于5的消除,问最终是否能全部消除
#include<iostream>
using namespace std;
const int N=1000+10;
int sta[N];
bool used[N];
int main()
{
int n;
while(cin>>n)
{
for(int i=n-1;i>=0;i--)
cin>>sta[i];
memset(used,false,sizeof(used));
if(n%2)//奇数必挂(之前没注意到,纠结了下。。。)
{
cout<<0<<endl;
}
else
{
int kk=-1;//用于重复循环
for(int i=0;i<n;i++)
{
if(kk==n)
kk=-1;//重新开始
for(int k=kk+1;k<n;k++)
{
if(!used[k])
break;
}
kk=k;
int p=0;
for(int j=k+1;j<n;j++)
{
if(!used[j])
{
p++;//忽略已被标记的
if(sta[k]==sta[j]&&p<=3)//相等
{
used[k]=used[j]=true;//一对消除
break;
}
}
}
}
int flag=0;
for(i=0;i<n;i++)
if(!used[i])//有没标记的输出0
flag=1;
if(flag)
cout<<0<<endl;
else
cout<<1<<endl;
}
}
return 0;
}