[蓝桥杯 2014 省 AB] 蚂蚁感冒

前言:

今天在写题的时候遇到了这道题,觉得这道题虽然只是一道模拟实现的题型,但是我觉得他的解题思路十分的震惊我,所以我来分享一下这道题的题解,以及思路.

题目解读:

题目的意思就是在一根麻绳上有n只蚂蚁,分别给出这几只蚂蚁的坐标和运动的方向,第一只蚂蚁是患有病毒的蚂蚁,只要和他碰面就会感染上病毒.让我们求最后的患病的蚂蚁的个数.

解题思路:

一开始我看到这道题的时候在想着怎么模拟实现蚂蚁相遇的场景,但是我的能力有限,根本无法模拟蚂蚁掉头的场景,然后我们来看这几只蚂蚁的运动的速度是一样的,所以只要是同向运动的蚂蚁在不掉头的前提下他们就一定不会相遇,但是这道题难得地方就是这蚂蚁会掉头.....

但是我们这样想假设A-> <-B这样的情景当他们相遇后的场景就变成了这样.

<-A B-> 我们是不是可以看作这样的图

<-B A->我们就让相遇过后改变的只是蚂蚁的患病的状态,就像幽灵一样穿过去,因为掉头总是会有一个蚂蚁接替他对方蚂蚁的运动的状态.

所以我们的解题思路出现了:

当患病的蚂蚁是向左移动的时候,如果这只蚂蚁的左边有向右移动的蚂蚁,那么患病的蚂蚁就是在左边的向右移动的蚂蚁+右边向左移动的蚂蚁+1;

如果没有的话就是1

那么如果患病的蚂蚁是向右移动的话,我们看如果右边有向左移动的蚂蚁的话,答案就是:

右边向左移动的蚂蚁+左边向右移动的蚂蚁+1

如果右边没有向左移动的蚂蚁那么答案就是1

到这里我们的解题的核心思路就捋顺了

下面就是代码的实现了;

代码实现:

cpp 复制代码
#include<iostream>
#include<cmath>
using namespace std;
const int N=60;
int a[N];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
	  cin>>a[i];	
	}
	int x=a[1];
	if(x<0)
	{
		int ret=0;
	for(int i=2;i<=n;i++)
	{
		if(fabs(a[i])<fabs(x)&&a[i]>0)
		{
			ret++;
		}
	}
	if(ret==0)
	{
		cout<<ret+1;
	}else
	{
		for(int i=2;i<=n;i++)
		{
			if(fabs(a[i])>fabs(x)&&a[i]<0)
			{
				ret++;
			}
		}
			cout<<ret+1;
	}

	}else
	{
			int ret=0;
	for(int i=2;i<=n;i++)
	{
		if(fabs(a[i])>fabs(x)&&a[i]<0)
		{
			ret++;
		}
	}
	if(ret==0)
	{
		cout<<ret+1;
	}else
	{
		for(int i=2;i<=n;i++)
		{
			if(fabs(a[i])<fabs(x)&&a[i]>0)
			{
				ret++;
			}
		}
		cout<<ret+1;
	}
	
	}
	
	return 0;
}
相关推荐
^yi1 小时前
【Linux系统编程】进程状态的理解
算法·僵尸进程·孤儿进程·进程状态·挂起状态·阻塞状态
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-7 12-24小时制(C语言实现)
c语言·开发语言·数据结构·算法
长不胖的路人甲2 小时前
二叉排序树(BST)Java 完整实现 + 删除思路详解
java·开发语言·算法
geovindu2 小时前
python: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·python·算法·搜索算法
长不胖的路人甲2 小时前
可达性分析法(根搜索算法)完整详解
java·jvm·算法
paeamecium2 小时前
【PAT甲级真题】- Kuchiguse (20)
数据结构·c++·python·算法·pat考试·pat
青山木2 小时前
Hot 100 --- 全排列
java·数据结构·算法·leetcode·深度优先
海兰2 小时前
【高速缓存】RedisVL 存储类型选择指南:Hash 与 JSON
人工智能·redis·算法·缓存·json·哈希算法
KaMeidebaby3 小时前
卡梅德生物技术快报|核酸适配体文库筛选:核酸适配体文库筛选全流程技术解析:NGS与AI辅助方案的设计与实践
前端·人工智能·物联网·算法·百度
数聚天成DeepSData3 小时前
CWRU轴承数据集官方入口与替代获取渠道(2025核实版)
算法