1211. 蚂蚁感冒

摘要
Title: 1211. 蚂蚁感冒
Tag: 思维
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

1211. 蚂蚁感冒

  • 题意

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

  • 思路

    ps: 两个蚂蚁碰到后掉头,可以理解成两个蚂蚁互换,代替对方继续走

    • 第一只蚂蚁不管方向朝哪里,只要它右边的蚂蚁向左走就可能碰撞感染,同样,第一只蚂蚁左边的蚂蚁只要朝右边走也可能被感染,这样就很容易得到ans=right+left+1ans=right+left+1。这里leftleft表示左边蚂蚁向右走的数量,rightright表示右边蚂蚁向左走的数量,11是指第一只蚂蚁本身。

    • 还有一种特殊情况,就是当第一只蚂蚁向左走的时候,如果第一只蚂蚁左边没有向右爬行的蚂蚁,由于爬行速度相同,所以不管第一只蚂蚁右边有多少向左爬行的,其右边的蚂蚁永远不可能被感染。同理,当第一只蚂蚁向右走的时候,如果第一只蚂蚁右边没有向左爬行的蚂蚁,其左边也永远不可能感染。

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    '''
    Author: NEFU AB-IN
    Date: 2022-03-23 16:31:59
    FilePath: \ACM\Acwing\1211.py
    LastEditTime: 2022-03-23 16:31:59
    '''
    N = 55
    a = [0] * N

    n = int(input())

    a = list(map(int, input().split()))

    l, r = 0, 0
    for i in range(1, n):
    if abs(a[0]) < abs(a[i]) and a[i] < 0:
    r += 1
    if abs(a[0]) > abs(a[i]) and a[i] > 0:
    l += 1

    if (a[0] > 0 and r == 0) or (a[0] < 0 and l == 0):
    print(1)
    else:
    print(r + l + 1)
使用搜索:谷歌必应百度