解题思路:


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

两种特殊情况:同方向前面的都是同自己的一个方向,如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;	
}


点赞(1)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论