1710819070


私信TA

用户名:1710819070

访问量:16110

签 名:

好好学习

等  级
排  名 335
经  验 5381
参赛次数 6
文章发表 21
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

1+1+1+1+1+1=田

解题思路:


写了蛮长时间了,脑子转不过来了。。

两种特殊情况:同方向前面的都是同自己的一个方向,如4,5,6
一般情况有两种,相碰到了两个就反向:

        假如一开始是这样的:4 和 -5,用箭头表示为:   ->  <-  ,

                                                 相碰了,各自掉头:   <-   ->

           但是我们可以这样理解:

                                                4-> ->

                                                  <- <- 5 

            就相当于穿过去了,也就是说,整体来看,原来是什么方向,你就怎么走,直到你碰到有毒的蚂蚁,

            那么它就被毒上了。
注意事项:

参考代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n, i, j=0, a[200],b[200],d = 1,flag = 1;
	cin >> n;
	for(i = 0; i < n; i++)
	    cin >> a[i];
	//两种特殊情况,同方向前面的都是同自己的一个方向,如4,5,6	
	if(a[0] < 0)	//特殊情况1
	{
		for(i = 0; i < n; i++)	
		{
		        if(abs(a[i]) < abs(a[0]) )
			{	
				if(a[i] > 0)
				{				
					flag = 0;break;		
				}													
			}	
			if(!flag) break;
		}
	}
	else  //特殊情况2
	{
		for(i = 0; i < n; i++)	
		{
			if(abs(a[i]) > a[0] )
			{
				if(a[i] < 0) 
				{
					flag = 0;break;
				}				
			}	if(!flag) break;
		}
	}	
	if(flag) cout << 1 << endl;	
	else	 //一般情况有两种
	{		
		if(a[0] > 0) 
		{
			for(i = 1; i < n; i++)
			{  //-1 2 -3 4 *5* 6 -7 8 -9
			  //  1 2  3 4 *5* 6  7 8  9
				if(abs(a[i]) < a[0]) 
				{
					if(a[i] > 0) d++;
				}
				else  //if(abs(a[i]) > a[0]) 
				{
					if(a[i] < 0) d++;										
				}
			}					
		}
		else {
			for(i = 1; i < n; i++)
			{
				if(abs(a[i]) < abs(a[0])) 
				{
					if(a[i] > 0) d++;
				}
				else
				{
					if(a[i] < 0) d++;
				}
			}			
		}
		cout << d << endl;
	}			
	return 0;	
}


 

0.0分

3 人评分

  评论区

  • «
  • »