YTU.2504: 蚂蚁感冒(2)

网友投稿 618 2022-10-27

YTU.2504: 蚂蚁感冒(2)

YTU.2504: 蚂蚁感冒(2)

2504: 蚂蚁感冒

Time Limit: 1 Sec   Memory Limit: 128 MB

Submit: 391

Solved: 162

[

​​Submit​​][

​​Status​​][

​​Web Board​​]

Description

长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。  请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

Input

第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。

Output

要求输出1个整数,表示最后感冒蚂蚁的数目。

Sample Input

35 -2 8

Sample Output

1

HINT

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

思路分析:

一只蚂蚁头朝右,那它势必会感染到它的右侧所有头向左的蚂蚁,这些头向左的蚂蚁又会去感染他左侧所有头向右的蚂蚁。

所以,只需要统计出第一只蚂蚁左侧头朝右的蚂蚁和第一只蚂蚁右侧头朝左的蚂蚁的数量,然后加上它本身就是所有被感染的蚂蚁数量。但是有个特殊点需要注意一下,第一只蚂蚁头朝右时要保证他的右侧一定有头向左的蚂蚁才行。

AC代码:

#include #include struct ANT{ int loc;//在第一个蚂蚁的左侧还是右侧 //1表示右侧,-1表示左侧 int dir;//头的方向};struct ANT ant[60];int main(){ int n; while(scanf("%d",&n)!=EOF) { int i; int cold=1,rr,rl,lr,ll; rr=rl=lr=ll=0; int a[n]; for(i=0; i0&&rl!=0)//感冒的蚂蚁头朝右 cold=rl+lr+1; if(a[0]<0&&lr!=0)//感冒的蚂蚁头朝左 cold=rr+ll+1; printf("%d\n",cold); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:kernelpop - 内核权限升级枚举和利用框架
下一篇:microSocket 十分适合学习的go语言socket框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~