您当前的位置: 首页 >  蓝桥杯

不牌不改

暂无认证

  • 3浏览

    0关注

    422博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[蓝桥杯][历届试题]蚂蚁感冒

不牌不改 发布时间:2021-07-26 18:25:19 ,浏览量:3

题目

题目链接

题解 思路一:细分+模拟

直接暴力枚举每一秒,修改每个蚂蚁的位置和方向。 但是需要注意,假如两个蚂蚁坐标相邻,那么经过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            
关注
打赏
1662186765
查看更多评论
0.0492s