SDNU 1206.蚂蚁感冒 代码如此简单,思维练习7月29

Posted zhchoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDNU 1206.蚂蚁感冒 代码如此简单,思维练习7月29相关的知识,希望对你有一定的参考价值。

蚂蚁感冒

Description

长100厘米的细长直杆子上有n仅仅蚂蚁。

它们的头有的朝左,有的朝右。

每仅仅蚂蚁都仅仅能沿着杆子向前爬,速度是1厘米/秒。 当两仅仅蚂蚁碰面时。它们会同一时候掉头往相反的方向爬行。

这些蚂蚁中,有1仅仅蚂蚁感冒了。而且在和其他蚂蚁碰面时。会把感冒传染给碰到的蚂蚁。

请你计算,当全部蚂蚁都爬离杆子时,有多少仅仅蚂蚁患上了感冒。

Input

第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。

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

当中。第一个数据代表的蚂蚁感冒了。

Output

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

Sample Input

3
5 -2 8

Sample Output

1
是不是没有思路?初次做这个题。确实没思路。只是刘汝佳的训练指南开篇就提到过,两个蚂蚁碰头然后转向继续爬。从远处看就像相互穿过去一样。这样想的话。就简单了。仅仅需推断感冒的蚂蚁左側有多少仅仅往右爬的,在推断右側有多少仅仅往左爬的,加起来就是答案。千万别忘了本身也是一仅仅感冒的蚂蚁。代码例如以下:

#include<cstdio>
int main(){
    int n,x,f[110]={0},t,sum=1;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&x);
        if(i==0) x>0?t=x:t=-x;
        x>0?

f[x]=1:f[-x]=-1; } for(int i=0;i<t;i++) if(f[i]==1) sum++; for(int i=t+1;i<110;i++) if(f[i]==-1) sum++; printf("%d\n",sum); return 0; }



以上是关于SDNU 1206.蚂蚁感冒 代码如此简单,思维练习7月29的主要内容,如果未能解决你的问题,请参考以下文章

蚂蚁感冒

蚂蚁感冒 -- 蓝桥杯

2504: 蚂蚁感冒

LQ0212 蚂蚁感冒序列处理

蓝桥杯 蚂蚁感冒

SDNU 1245.这题超难的,建议先做其他的,看都不要看(思维)