本文主要是介绍AcWing 1211. 蚂蚁感冒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
AcWing网站原题通道
题目大意是:在很多只蚂蚁中有一直蚂蚁是感冒的,蚂蚁之间碰面的话,会掉头,当所有的蚂蚁离开长杆的时候,有多少只感冒的蚂蚁。
蚂蚁会掉头我们可以理解成蚂蚁之间互相穿过即可,也就是左边向右走的蚂蚁和右边向左走的蚂蚁碰面的话,那么我们就理解为他们并没有掉头,而是直接穿过对面的蚂蚁一直向前走即可,那么我们可以根据感冒的蚂蚁想左走还是向右走进行分类。
- 假如感冒的蚂蚁向右走:
(1)在感冒的蚂蚁左边的向左走的蚂蚁一定不会被感染
(2)在感冒的蚂蚁右边的向右走的蚂蚁一定不会被感染
(3)在感冒的蚂蚁右边的向左走的蚂蚁一定不会被感染
(4)在感冒的蚂蚁左边的向右走的蚂蚁:如果在感冒的蚂蚁右边存在向左走的蚂蚁,那么一定会被感染;如果在感冒的蚂蚁右边不存在向左走的蚂蚁,一定不会被感染。
那么对于向左走也同理。
#include <iostream>
#include <cmath>
#include <algorithm>using namespace std;const int N = 55;
int n;
int a[N];int main()
{cin >> n;/*(1)蚂蚁向右走左边向左走,不会被感染右边向右走,不会被感染右边向左走,会被感染左边向右走:如果感染蚂蚁右边存在向左走的,会被感染;否则,不会被感染(2)蚂蚁向左走左边向左走,不会被感染右边向右走,不会被感染左边向右走,会被感染右边向左走:如果感染蚂蚁左边存在向右走的,会被感染;否则,不会被感染*/for(int i = 0; i < n; i++) cin >> a[i];int left = 0 , right = 0; // 表示左边向右走的蚂蚁数量,和右边向左走的蚂蚁数量for(int i = 1; i < n; i++){if(abs(a[i]) < abs(a[0]) && a[i] > 0) left++;if(abs(a[i]) > abs(a[0]) && a[i] < 0) right++;}// 如果蚂蚁向右走if(a[0] > 0 && right == 0 || a[0] < 0 && left == 0) cout << 1 << endl;else cout << left + right + 1 << endl;return 0;
}
这篇关于AcWing 1211. 蚂蚁感冒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!