资讯动态

洛谷 P8611:蚂蚁感冒 ← 模拟题

发布时间:2026/10/21 18:19:48 来源:尧图企业网站定制
【题目来源】https://www.luogu.com.cn/problem/P8611https://www.acwing.com/problem/content/1213/【题目描述】长 100 厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左有的朝右。每只蚂蚁都只能沿着杆子向前爬速度是 1 厘米/秒。当两只蚂蚁碰面时它们会同时掉头往相反的方向爬行。这些蚂蚁中有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时会把感冒传染给碰到的蚂蚁。请你计算当所有蚂蚁都爬离杆子时有多少只蚂蚁患上了感冒。【输入格式】第一行输入一个整数 n, 表示蚂蚁的总数。接着的一行是 n 个用空格分开的整数 Xi,Xi 的绝对值表示蚂蚁离开杆子左边端点的距离。正值表示头朝右负值表示头朝左数据中不会出现 0 值也不会出现两只蚂蚁占用同一位置。其中第一个数据代表的蚂蚁感冒了。【输出格式】输出1个整数表示最后感冒蚂蚁的数目。【数据范围】1n50,0|Xi|100【输入样例1】35 -2 8【输出样例1】1【输入样例2】5-10 8 -20 12 25【输出样例2】3【算法分析】● 两只蚂蚁碰面掉头可以看作是一只蚂蚁穿过了另一只蚂蚁。因为碰面之后两只蚂蚁都感冒了掉不掉头其实无所谓毕竟都感冒了。这样分析的话本题就简单多了。● 依据第一只感冒的蚂蚁向左还是向右进行分析判断。由于蚂蚁速度相同如果第一只感冒的蚂蚁向右那么它右面向左走的一定会传染右面向右走的一定不会传染左面向左走的一定不会传染左面向右走的会被右面向左走的被感染的感染。如果第一只感冒的蚂蚁向左与上同理。若设 tori 表示第一只感冒的蚂蚁左边向右走的蚂蚁数量tole 表示第一只感冒的蚂蚁右边向左走的蚂蚁数量则依据上图易知不管第一只感冒的蚂蚁向右走还是向左走都可得anstoritole1。其中的 1 是指第一只感冒的蚂蚁本身。● 输入样例 1 的示意图如下所示。注意正值表示头朝右负值表示头朝左。【算法代码】#include bits/stdc.h using namespace std; int tole,tori; int main() { int n,base; cinnbase; for(int i1; in; i) { int x; cinx; if(abs(x)abs(base) x0) tori; //left to right if(abs(x)abs(base) x0) tole; //right to left } if((base0 tori0) || base0 tole0) cout1endl; else couttoletori1endl; return 0; } /* in: 5 -10 8 -20 12 25 out: 3 */【参考文献】https://www.acwing.com/solution/content/7077/https://www.acwing.com/solution/content/88693/https://blog.csdn.net/sorryhorizon_L/article/details/136108714

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑