• 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 ",sum); return 0; }



  • 相关阅读:
    [cdq分治][树状数组] Bzoj P3262 陌上花开
    [Prufer序列] Bzoj P4766 文艺计算姬
    [欧拉回路][并查集] Bzoj P3706 反色刷
    [欧拉回路][dfs] Uoj #117 欧拉回路
    [并查集][Tarjan] Bzoj P5017 炸弹
    day18
    day17
    树形DP学习笔记
    [分治]JZOJ 6308 中间值
    [贪心][完全背包]JZOJ 6309 完全背包
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8413703.html
Copyright © 2020-2023  润新知