解题思路:


最最最重要的思路是 蚂蚁碰头时 你可以看做没有碰头穿过去(当然感冒肯定会传染)


注意事项:


一定要考虑第一只蚂蚁是否掉头

最后相加时别忘了第一只


参考代码:

#include <stdio.h>  
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct
{
 int dis;
 int cold;//1 haved cold    0 no
}ant;
void arrange(ant ants[],int n);
int find(ant ants[],int n);
int main()
{
 int n,i;
 ant ants[50];
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  scanf("%d",&ants[i].dis);
  ants[i].cold=0;
 }
 ants[0].cold=1;
 arrange(ants,n);
 printf("%d",find(ants,n));
 return 0;
}
void arrange(ant ants[],int n)
{
 int i,j,k;
 ant temp;
 for(i=0;i<n;i++)
 {
  k=i;
  for(j=i;j<n;j++)
  {
   if(fabs(ants[j].dis)<fabs(ants[k].dis))
   k=j;
  }
  if(k!=i)
  {
   temp=ants[i];
   ants[i]=ants[k];
   ants[k]=temp;
  } 
 }
 
}
int find(ant ants[],int n)
{
 int i,k,cold=-1;
 int left_zuo=0,left_you=0;  //第一只的左边蚂蚁爬的方向
 int right_zuo=0,right_you=0;//第一只的右边蚂蚁爬的方向

 for(i=0;i<n;i++)
 {
  if(ants[i].cold==1)
  {
   cold=i;
  }
  else if(cold==-1)
  {
   if(ants[i].dis<0)
   left_zuo++;
   else
   left_you++;
  }
  else
  {
   if(ants[i].dis<0)
   right_zuo++;
   else
   right_you++;
  }
 }
    if(ants[cold].dis<0)
    {
     if(left_you==0)
     return 1;
     else
     {
      return left_you+right_zuo+1;
  }
 }
 else
 {
  if(right_zuo==0)
  return 1;
  else
  {
   return left_you+right_zuo+1;
  }
 }
}

点赞(1)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论