蚂蚁感冒c++

题目
思路

"两蚂蚁碰面会掉头,若其中一只蚂蚁感冒了,会把感冒传染给碰到的蚂蚁",这句话看作是"两蚂蚁碰面会互相穿过,只是把感冒的状态传给了另一只蚂蚁",因为哪只蚂蚁感冒了并不是题目的重点,重点是有多少蚂蚁感冒了。因此本题可以理解为:感冒的蚂蚁一直往一个方向走,求共感染了几只蚂蚁?

通过观察可以发现,若以第一只感冒蚂蚁的位置来分左右界,

  1. 若感冒蚂蚁向右走,由于蚂蚁速度大小相同:

在右界,向右边走的蚂蚁必定不会被感染,向左边走的蚂蚁必定被感染。

在左界,若右界有向左走的蚂蚁,那么左界向右边走的必定被感染;否则不会被感染。向左边走的不会被感染。

  1. 若感冒蚂蚁向左走,由于蚂蚁速度大小相同:

在左界,向左边走的蚂蚁必定不会被感染,向右边走的蚂蚁必定被感染。

在右界,若左界有向右走的蚂蚁,那么右界向左边走的必定被感染;否则不会被感染。向右边走的不会被感染。

代码
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main()
{
  int n, x, x1;
  int rtl = 0, ltr = 0;//右界向左走的蚂蚁;左界向右走的蚂蚁
  cin >> n;
  cin >> x;
  if (x > 0)
  {
    
    for (int i = 2; i <= n; i ++)
    {
      cin >> x1;
      if (abs(x1) > abs(x) && x1 < 0) rtl ++;
      if (abs(x1) < abs(x) && x1 > 0) ltr ++;
    }
    //"1"表示第一个感冒的蚂蚁
    int res = 1 + rtl;
    if (rtl) res += ltr;
    cout << res;
  }
  else
  {
    for (int i = 2; i <= n; i ++)
    {
      cin >> x1;
      if (abs(x1) < abs(x) && x1 > 0) ltr ++;
      if (abs(x1) > abs(x) && x1 < 0) rtl ++;
    }
    int res = 1 + ltr;
    if (ltr) res += rtl;
    cout << res;
  }
  return 0;
}
简化版代码

通过上面的代码可以发现,当第一只感冒的蚂蚁向右走时,只有rtl大于0,ltr才能加入到res中;若rtl为0,那么把rtl加入到res中没有意义。当第一只感冒的蚂蚁向左走时,只有ltr大于0,rtl才能加入到res中;若ltr为0,那么把ltr加入到res中没有意义。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main()
{
  int n, x, x1;
  cin >> n;
  cin >> x;
  
//以第一只感冒的蚂蚁为界,l:向左边走的蚂蚁的数量;r:向右边走的蚂蚁的数量
  int l = 0, r = 0;
  for (int i = 2; i <= n; i ++)
  {
    cin >> x1;
    if (abs(x1) < abs(x) && x1 > 0) r ++;
    if (abs(x1) > abs(x) && x1 < 0) l ++;
  }
  
  int res = 1;
  if ((x < 0 && r) || (x > 0 && l)) res += (r + l);
  cout << res;
}
相关推荐
软件黑马王子2 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
闲猫2 小时前
go orm GORM
开发语言·后端·golang
黑不溜秋的3 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
李白同学3 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?4 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农5 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿5 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!5 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴5 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程5 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛