蓝桥杯 蚂蚁感冒

技巧题

蚂蚁碰面后会掉头。这个掉头动作会让我们的逻辑变得混乱,因为谁也不知道什么时候会碰面,表面上看会无从下手,那么我们分析一下蚂蚁碰面后的状态。

1.两只健康蚂蚁碰面后,两个方向都会有一只健康的蚂蚁在行走
2.至少一只蚂蚁有病,两个方向都会有一只有病的蚂蚁在行走

其实蚂蚁碰面后根本没有必要掉头,或者说即使掉头,效果也是和不掉头一样的。

所以每只蚂蚁都会坚定不移的朝一个固定的方向走,下面看看第一只有病的蚂蚁,如果它初始向左走,那是不是它左边所有的向右走的蚂蚁都会遭殃?同样,当左边遭了秧的蚂蚁遇到了其右边向左走的蚂蚁,那么它们也会遭殃。

存在一种特殊的情况,即所有的蚂蚁都朝一个方向走,那谁也不会被传染,最终只有一只蚂蚁有病。

假设有病的蚂蚁是A,A左边向右走的蚂蚁数量为lf,A右边向左走的蚂蚁数量为rg,那么

1.A向右走,且rg==0,;或者A向左走,且lf==0,ans=1;
2.ans=lf+rg+1;
  1. #include <iostream>  
  2. #include <stdio.h>  
  3. #include <math.h>  
  4. #include <algorithm>  
  5. using namespace std;  
  6.   
  7. struct Ant       //结构体 用Ant定义出来的变量拥有Ant的一套(pos dir cold)
  8. {  
  9.     int pos;  
  10.     int dir;  
  11.     int cold;     
  12. };  
  13.   
  14.   
  15. int n,ans,lf,rg;  
  16. Ant ant[60];  
  17.   
  18. bool cmp(const Ant a,const Ant b)  
  19. {  
  20.     return a.pos<b.pos;  
  21. }  
  22.   
  23. int main()  
  24. {  
  25.     int i,j;  
  26.     int len;  
  27.     int cold_ant;  
  28.     while(~scanf("%d",&n))  
  29.     {  
  30.         for(i=0;i<n;i++)  
  31.     {  
  32.         scanf("%d",&len);          //分别设置ant[i]的属性
  33.         ant[i].pos=abs(len);  
  34.         ant[i].dir=len<0?-1:1;  
  35.         ant[i].cold=0;  
  36.     }  
  37.     ant[0].cold=1;  
  38.     lf=rg=0;  
  39.     sort(ant,ant+n,cmp);  
  40.  //找到生病的蚂蚁下标为多少,同时确定了If的数量
  41.     for(i=0;i<n;i++)  
  42.     {  
  43.         if(ant[i].cold==1)  
  44.             break;  
  45.         if(ant[i].dir>0)  
  46.             lf++;  
  47.     }  
  48.     cold_ant=i;    
  49.     for(i=i+1;i<n;i++)  
  50.     {                              //从i+1开始往右,即从生病的蚂蚁往右,目的是寻找rg的数量
  51.         if(ant[i].dir<0)  
  52.             rg++;  
  53.     }  
  54.     if((ant[cold_ant].dir>0&&rg==0)||(ant[cold_ant].dir<0&&lf==0))  //即上所述的两种情况
  55.         ans=1;  
  56.     else  
  57.         ans=lf+rg+1;  
  58.     printf("%d\n",ans);  
  59.     }  
  60.       
  61.     return 0;  
  62. }  
 
 
posted @ 2018-03-12 16:22  kong孔  Views(122)  Comments(0)    收藏  举报