1211-蚂蚁感冒

题目描述

关系

内容

问题分析

最初思路

如果这道题要模拟实现的话,是十分复杂的,恐怕得要用到线程,于是我不得不想这道题还是一道数学公式题目。

思路分析

关键在于把两个蚂蚁相撞,当成两只蚂蚁穿过。因为,本质上,每只蚂蚁除了位置不同,方向不同,都是一样的。

于是,调头的问题就被巧妙解决了。

假设感冒的蚂蚁为 a,并且向右走,那么 a 右边的向左走的蚂蚁都会被感染。

对于 a 左边的蚂蚁,有两种情况:

如果蚂蚁 a 初始是向左走的,那么是同理的。

执行流程设计

总结

代码实现

#include <bits/stdc++.h>
using namespace std;

const int N = 55;
int n;
int x[N];

int main()
{
    cin >> n; 
    for (int i = 0; i < n; i++) cin >> x[i];
    
    int left = 0, right = 0; // 左边向右走的数量,和右边向左走的数量
    for (int i = 1; i < n; i++) {
        if (abs(x[i]) <= abs(x[0]) && x[i] > 0) left++;
        else if (abs(x[i]) >= abs(x[0]) && x[i] < 0) right++;
    }
    
    if (x[0] > 0 && right == 0 || x[0] < 0 && left == 0) cout << 1 << endl;
    else cout << left + right + 1 << endl;
    
    return 0;
}