彦羽


私信TA

用户名:tianyu

访问量:13375

签 名:

千里之行 始于足下

等  级
排  名 2337
经  验 2351
参赛次数 0
文章发表 17
年  龄 0
在职情况 学生
学  校 临沂大学
专  业

  自我简介:

解题思路:


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


注意事项:


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

最后相加时别忘了第一只


参考代码:

#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;
  }
 }
}

 

0.0分

0 人评分

  评论区

  • «
  • »