题意呢,就是有n只蚂蚁在杆子上,给出每只蚂蚁的坐标,他们头的朝向不同,有的向左,有的向右,他们以每分钟(还是每秒钟来着了……)一厘米的速度移动,两只蚂蚁碰头的时候两只都会向相反方向走,第一只蚂蚁感冒了(阿嚏……),和它接触的每只蚂蚁都会感冒,问当所有蚂蚁爬离杆子,有多少只感冒的
思路呢,因为所有速度相同,所以谁都追不上谁……然后呢这只感冒的蚂蚁面向的方向和他朝向相反的蚂蚁都会感冒(阿嚏……阿嚏……阿嚏……),如果他前面没有朝向和他相反的,那到最后就这一只蚂蚁感冒……如果有的话,不仅前面的蚂蚁会感冒,它后面的和它原来朝向相同的蚂蚁也会感冒,思路很清晰,代码不难,但是不太好想……
这道题练习的时候judge错了,本来做过一遍了,顺利地打完代码交上去发现错了,不由得开始质疑人生……

1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 #include<algorithm> 5 #include<math.h> 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<n-1;i++){ 16 scanf("%d",&a); 17 if(a<0) {a*=-1;tou[a]=-1;} 18 else tou[a]=1; 19 } 20 if(ganmao>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 ",sum+1); 42 } 43 return 0; 44 } 45 //数值蚂蚁离开杆子左边端点的距离 正值表示头朝右 负值表示头朝左