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

news/2025/1/30 10:51:07 标签: 蓝桥杯, 算法, c++, 数据结构

题目描述

长 100厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左,有的朝右。

每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米 / 秒。

当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

这些蚂蚁中,有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

输入格式

第一行输入一个整数 n(1<n<50) 表示蚂蚁的总数。

接着的一行是 n 个用空格分开的整数 Xi(−100<Xi<100),Xi​ 的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现 0 值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。

输出格式

要求输出 1个整数,表示最后感冒蚂蚁的数目。

输入输出样例

输入 #1

3
5 -2 8

输出 #1

1

输入 #2

5
-10 8 -20 12 25

输出 #2

3

思路:

可知,不管第一只蚂蚁开始往哪边走,只要第一只蚂蚁左边的蚂蚁向右走就一定会感冒, 第一只蚂蚁右边的蚂蚁向左走就一定会感冒。所以只要出左边和右边符合要求的蚂蚁数,ans=left+right+1;

但是会有特殊情况1.当第一只蚂蚁朝左走,左边没有朝右走的蚂蚁 ,此时感冒的就只能是自己,其他的不会被传染,同理,2.当第一只蚂蚁朝右走,右边没有朝左走的蚂蚁 ,此时感冒的就只能是自己,其他的不会被传染。

代码:

#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
using namespace std;
int main()
{
	int n,ans=0,left=0,right=0;
	cin>>n;
	vector<int> v(n+5,0);
	for(int i=0;i<n;i++) cin>>v[i];
	for(int i=1;i<n;i++)
	{
//		if(v[0]<0&&(abs(v[i])<abs(v[0]))&&v[i]>0)
//			left++;
//		else if(v[0]<0&&(abs(v[i])>abs(v[0]))&&v[i]<0) 
//			right++;
//		if(v[0]>0&&(abs(v[i])<abs(v[0]))&&v[i]>0)
//			left++;
//		else if(v[0]>0&&(abs(v[i])>abs(v[0]))&&v[i]<0) 
//			right++;

		if((abs(v[i])<abs(v[0]))&&v[i]>0)
			left++;
		else if((abs(v[i])>abs(v[0]))&&v[i]<0) 
			right++;
	}
	if(left==0&&v[0]<0) { //朝左走,左边没有朝右走的蚂蚁 
		cout<<1<<endl;return 0;
	}else if(right==0&&v[0]>0) {//朝右走,右边没有朝左走的蚂
		cout<<1<<endl;return 0;
	}
	ans=1+left+right;
	cout<<ans<<endl;
	return 0;	
} 

纯享简洁版:

#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
using namespace std;
int main()
{
	int n,left=0,right=0;
	cin>>n;
	vector<int> v(n+5,0);
	for(int i=0;i<n;i++) cin>>v[i];
	for(int i=1;i<n;i++)
	{
		if((abs(v[i])<abs(v[0]))&&v[i]>0)	left++;
		else if((abs(v[i])>abs(v[0]))&&v[i]<0)	right++;
	}
	if(left==0&&v[0]<0) { 
		cout<<1<<endl;return 0;
	}else if(right==0&&v[0]>0) {
		cout<<1<<endl;return 0;
	}
	cout<<1+left+right<<endl;
	return 0;	
} 

 


http://www.niftyadmin.cn/n/5837763.html

相关文章

C# as 和 is 运算符区别和用法

前言 在C#中&#xff0c;as 和 is 关键字都用于处理类型转换的运算符&#xff0c;但它们有不同的用途和行为。本文我们将详细解释这两个运算符的区别和用法。 is 运算符 is 运算符用于检查对象是否是某个特定类型&#xff0c;或者是否可以转换为该类型。它返回一个布尔值 (t…

大数据相关职位介绍之一(数据分析,数据开发,数据产品经理,数据运营)

大数据相关职位介绍之一 随着大数据、人工智能&#xff08;AI&#xff09;和机器学习的快速发展&#xff0c;数据分析与管理已经成为各行各业的重要组成部分。从互联网公司到传统行业的数字转型&#xff0c;数据相关职位在中国日益成为推动企业创新和提升竞争力的关键力量。以…

深入 Rollup:从入门到精通(一)专栏介绍

专栏介绍 欢迎来到 《深入 Rollup&#xff1a;从入门到精通》 专栏&#xff01;&#x1f389; 本专栏将带您全面掌握 Rollup 这一强大的 JavaScript 模块打包工具。 无论您是初学者还是有一定经验的开发者&#xff0c;都能在这里找到适合自己的学习路径。 通过本专栏&#…

Vue3 结合 .NetCore WebApi 前后端分离跨域请求简易实例

1、本地安装Vue3环境 参考&#xff1a;VUE3中文文档-快速上手 注意&#xff1a;初始安装vue时&#xff0c;需要安装router&#xff0c;否则后续也要安装 2、安装axios组件 比如&#xff1a;npm install axioslatest 或 pnpm install axioslatest 3、设置跨域请求代理 打开…

BGP分解实验·15——路由阻尼(抑制/衰减)实验

一个可以监控路由信息不稳定征兆的小特性&#xff0c;那些表现出不稳定的路由将会受到惩罚&#xff0c;直到它稳定下来为止。 实验拓扑如下&#xff1a; 配置两台路由器的基础连通性后&#xff0c;再到R2上设置半衰期5分钟、使用阈值750&#xff0c;惩罚阈值1500&#xff1b;并…

git push到远程仓库时无法推送大文件

一、错误 remote: Error: Deny by project hooks setting ‘default’: size of the file ‘scientific_calculator’, is 164 MiB, which has exceeded the limited size (100 MiB) in commit ‘4c91b7e3a04b8034892414d649860bf12416b614’. 二、原因 本地提交过大文件&am…

【Linux】gdb——Linux调试器

gdb使用背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 gdb使用方法 首先进入gdb gdb test_glist显示代码 断点 b 行…

第十章 E - F 开头的术语

文章目录 第十章 E - F 开头的术语字节序 (endian)企业缓存协议 (Enterprise Cache Protocol, ECP)枚举属性 (enumerated attribute)独占锁 (exclusive lock)显式引用 (explicit reference)表达式方法 (expression method)扩展全局引用 (extended global reference)范围索引 (e…