题目
题目链接
题解 思路一:细分+模拟直接暴力枚举每一秒,修改每个蚂蚁的位置和方向。 但是需要注意,假如两个蚂蚁坐标相邻,那么经过0.5秒二者相遇,就没法判断了。
因此,我们采用“细分”的思想,即相当于在每两个相邻坐标又添加了一个坐标,比如,两只蚂蚁分别位于5和6,当我们细分后,两只蚂蚁分别位于10和12,这样我们在模拟的时候相当于在枚举每0.5秒,也就是运动0.5cm,二者在11处相遇,不会出现小数的情况了。
(有能力的话,你也可以证明一下:细化后,不会存在某两只蚂蚁相遇点为非整数坐标位置。)
当全部蚂蚁都爬出杆(细化后的杆长为200),循环结束。 遍历统计被感染的蚂蚁的个数。
思路二:思维因为蚂蚁相遇后会掉头且蚂蚁的速度都相同,那我们不妨理解为蚂蚁相遇不会发生掉头,即从始至终各走各的,互不干扰,按初始方向爬行直至出杆。虽然不会掉头,但是相遇还是会相互感染的。
因此我们可以推断出:
以母体(初始被感染的蚂蚁)为中心,初始位置位于其左侧且初始方向向右的蚂蚁数目不为0时,初始位置位于母体右侧且初始方向向左的蚂蚁全部会被感染;初始位置位于其右侧且初始方向向左的蚂蚁数目不为0时,初始位置位于母体左侧且初始方向向右的蚂蚁全部会被感染。 计算出母体左侧向右爬行的蚂蚁个数和母体右侧爬行的蚂蚁个数后就很容易得到结果了。
注意:即使不考虑一侧为0时才进行统计的要求,仍可以AC(数据太水)
代码1#include
using namespace std;
struct Ant{
int pos, dir, aff, out; // 坐标,方向,是否被感染,是否在杆上
};
bool cmp(Ant a, Ant b) {
return a.pos x;
dir = x>0;
x = abs(x);
for(int i = 0;i >ant;
if(abs(ant) > x && ant
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?