题意呢,就是有n只蚂蚁在杆子上,给出每只蚂蚁的坐标,他们头的朝向不同,有的向左,有的向右,他们以每分钟(还是每秒钟来着了……)一厘米的速度移动,两只蚂蚁碰头的时候两只都会向相反方向走,第一只蚂蚁感冒了(阿嚏……),和它接触的每只蚂蚁都会感冒,问当所有蚂蚁爬离杆子,有多少只感冒的
思路呢,因为所有速度相同,所以谁都追不上谁……然后呢这只感冒的蚂蚁面向的方向和他朝向相反的蚂蚁都会感冒(阿嚏……阿嚏……阿嚏……),如果他前面没有朝向和他相反的,那到最后就这一只蚂蚁感冒……如果有的话,不仅前面的蚂蚁会感冒,它后面的和它原来朝向相同的蚂蚁也会感冒,思路很清晰,代码不难,但是不太好想……
这道题练习的时候judge错了,本来做过一遍了,顺利地打完代码交上去发现错了,不由得开始质疑人生……
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int main(){ 8 int n; 9 while(~scanf("%d",&n)){10 int a;11 int tou[105],sum=0;12 int ganmao;13 scanf("%d",&ganmao);14 memset(tou,0,sizeof(tou));15 for(int i=0;i 0){21 for(int i=ganmao;i<=100;i++){22 if(tou[i]==-1) sum++;23 }24 if(sum){25 for(int i=ganmao;i>=0;i--){26 if(tou[i]==1) sum++;27 }28 }29 }30 else if(ganmao<0){31 ganmao*=-1;32 for(int i=ganmao;i>=0;i--){33 if(tou[i]==1) sum++;34 }35 if(sum){36 for(int i=ganmao;i<=100;i++){37 if(tou[i]==-1) sum++;38 }39 }40 }41 printf("%d\n",sum+1);42 }43 return 0;44 }45 //数值蚂蚁离开杆子左边端点的距离 正值表示头朝右 负值表示头朝左