1396-可怜的农场主

1396-可怜的农场主

 

  • 内存限制:32MB 时间限制:1000ms 

  •  

题目描述:

高富帅zzh先生在美丽的青藏高原上有一大片牧场,里面养殖着n只稀有的菜菜龙,他们的编号从1到n。因为zzh先生有强迫症,所以农场中有且只有可能存在偶数只菜菜龙。如果两只菜菜龙互相仇视,当它们相邻时,他们就会非常生气,然后,可爱的菜菜龙就去见上帝了(不要问我这是什么鬼?我也不知道啊!)。

这群菜菜龙在饲养员LJT的喂养下,每天都吃喝不愁,所以这群菜菜龙闲的经常为了一点小事就会发生矛盾,进而仇视对方,导致每只菜菜龙都有一个仇视的菜菜龙,或许因为菜菜龙脑袋比较小,他们只有可能仇视一只菜菜龙。(饶过可爱的菜菜龙吧,它们的小脑袋装不下太多…)在饲养员LJT喂食的时候,他们总是围成圈吃饭,它们会按照编号从1到n围成一圈,在他们围成圈吃饭时,如果两个互相仇视的菜菜龙相邻,两只菜菜龙都会因看到对方而生气导致死亡,LJT会将死亡的菜菜龙扔出牧场,剩余的菜菜龙会再次按照编号围成一个圈,请问到最后牧场中死亡多少只菜菜龙?

 

输入描述:

多组输入
如果n为0,程序结束。
每组第一行输入一个整数n(0<n<1000);表示牧场中有n组互相仇视的菜菜龙,
接下来的n行,每行有两个整数a,b(0<b,a<=2n);代表一组互相仇视的菜菜龙a和菜菜龙b。

输出描述:

输出死亡的菜菜龙数量。
每个答案占一行。

样例输入:

复制

4
1 4
2 3
5 6
7 8
2
1 3
2 4
0

样例输出:

8
0

提示:   意思就是一群人围一圈,有仇的两个人不能够挨着,否则两人出局,别的人重新分配身边的人,

1、判断首尾是否有关系

2、完成步骤1后,利用栈,类似括号配对,按照顺序进栈,如果栈顶元素和下一个元素有关系,栈顶元素出栈,直到剩下的所有元素验证完,

#include<iostream>
#include<cstring>
#include<stack>
#include<cstdio>
using namespace std;
int main()
{
	int n;
	stack<int>s;
	while(~scanf("%d",&n)&&n!=0)
	{
		//cout<<"231"<<endl;
		int sum=0;
		int sk[10001];
		int i,begin,end,m,a,b,flag=0;
		m=2*n;
		for(i=1;i<=m;i++)sk[i]=i; //初始化 
		for(i=1;i<=n;i++)  //关系 
		{
			cin>>a>>b;
			//printf("%d\n",m);
			sk[a]=i;
			sk[b]=-i;
		}
		begin=1;end=m; 
		while(sk[begin]+sk[end]==0)
		{
			sum=sum+2;
			if(begin==n)
			{
				flag=1;
				break;
			}
			begin=begin+1;
			end=end-1;
		}
		if(flag==1)
		{
			printf("%d\n",sum);
			continue;
		}
		for(i=begin;i<=end;i++)
		{
			if(s.empty())
			{
				s.push(sk[i]);
			}
			else
			{
				if(s.top()+sk[i]==0)
				{
					s.pop();
					sum=sum+2;
				}
				else
				{
					s.push(sk[i]);
				}
			}
		 }
		 printf("%d\n",sum);
		 while(!s.empty())
		 {
		 	s.pop();
		  } 
		  
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值