zoukankan      html  css  js  c++  java
  • 小思维题-蚂蚁感冒——蓝桥杯

    [蚂蚁感冒](https://www.acwing.com/problem/content/description/1213/)
    

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

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

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

    Samples
    Input

    3 
    5  -2  8 
    

    Output
    1
    Input

    5 
    -10  8  -20  12  25
    

    Output
    3

    第一只蚂蚁是感冒的,其次,两只蚂蚁在相遇的时候,相互掉头,这时候可以看做是继续向前走,当成穿过对面的蚂蚁,这样的结果是等效的。
    因为所有的蚂蚁速度都是相等的,所以之后方向相反的情况才会相遇并且传染。
    那么来说,如果第一号蚂蚁如果是向右走的,那么他右面的蚂蚁中向左走的就会被感染,此时要加上这只蚂蚁右面的蚂蚁中向左走的蚂蚁数量;如果一号蚂蚁是向左走的,那么在这只蚂蚁左面的蚂蚁中向右走的蚂蚁就要被感染,此时数量要加上在这只蚂蚁左面并且向右走的蚂蚁的数量。
    特殊的情况是如果上面的两种情况中,有一种右面没有蚂蚁出现,此时就是这蚂蚁自己感冒,输出 1

    Main_Code

        int n=read;
        for(int i=1;i<=n;i++) a[i]=read;
        int t1=0,t2=0;
        for(int i=2;i<=n;i++){
            if(a[i] > 0 && abs(a[i]) < abs(a[1])) t1++;
            else if(a[i] < 0 && abs(a[i]) > abs(a[1])) t2++;
        }
        if(a[1] < 0 && t1 == 0) cout<<1<<endl;
        else if(a[1] > 0 && t2 == 0) cout<<1<<endl;
        else cout<<t1+t2+1<<endl;
    
  • 相关阅读:
    Make a web page as screensaver
    python写入sqlserver中文乱码问题
    单片机中的ROM,RAM和FLASH的作用
    单片机STM32F4系统内部中断和外部中断优先级问题
    单片机AHB和APB
    嵌入式编程中一些常用的转换函数
    'AVStream::codec': 被声明为已否
    Python安装Python_snappy安装失败
    .net core 数据库问题
    .net 5.0 中 CrystalQuartz 增加授权校验
  • 原文地址:https://www.cnblogs.com/PushyTao/p/14507434.html
Copyright © 2011-2022 走看看