蓝桥杯 [蚂蚁感冒] 思维

题目链接:http://lx.lanqiao.cn/problem.page?gpid=T119

题目大意:类似挑战程序设计的蚂蚁走杆子,区别在于有感冒蚂蚁,相撞时会传染。问最后有多少多被传染。

关键思想:看过蚂蚁走杆子原题的应该有这种思维,就是相撞往回走的蚂蚁和原来两只蚂蚁继续走是等效的。在本题中,区别就是两只相撞的蚂蚁都会患感冒。

      速度都相同使得本题很好解,考虑这几种情况。

        比如初始感冒蚂蚁为10,那么下次他能感染到的蚂蚁就是-12,-15之类的,可以化成条件式10+x<0并且10*x<0,当10替换成其他数(包括负数时)也是适用的。

        还要注意的是,如果有一只蚂蚁被传染了,那么其他和初始感冒蚂蚁同向并且在前端的都会被感染,比如9,10,-12。初始蚂蚁为10,那么-12的被感染后接着会和9相遇,9就躺枪了。

        于是我们就又抽象出这样的条件式来筛选后来躺枪的哪些(10+x)<0并且10*x<0(这只在有至少一只被感染的情况下才会有)。10可以换成其他数(包括负数)。这些条件式是通过举例归纳得到的。

代码如下:

/*
CopyRight GentleGamer
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int main(){
    int n,x[55];
    scanf("%d",&n);
    bool flag=false;    //flag标记是否有第一只被感染的
    int ache,cnt=1;     //ache为被感染的蚂蚁
    scanf("%d",&ache);
    for(int i=0;i<n-1;i++){
        scanf("%d",&x[i]);
        if(!flag&&ache+x[i]<0&&ache*x[i]<0){
            flag=true;
            continue;   //找到第一只被感染的了,千万不能break,因为要继续输入啊
        }
    }
    for(int i=0;i<n-1;i++){
        if((ache+x[i]<0&&ache*x[i]<0)||(flag&&ache*x[i]>0&&ache-x[i]>0))cnt++;
    }
    printf("%d",flag?cnt:1);//初始已经有一只被感染了哦
    return 0;
}
/*
5
20 4 -3 -10 -22
*/
时间: 2024-10-13 19:47:34

蓝桥杯 [蚂蚁感冒] 思维的相关文章

第五届蓝桥杯 蚂蚁感冒

蚂蚁感冒 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. 输入 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分

蓝桥杯 蚂蚁感冒

思路: 脑洞题. 蚂蚁碰面的时候不是掉头回去,而是互相"穿过". 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std; 5 6 int n, a[55]; 7 int main() 8 { 9 cin >> n; 10 cin >> a[0]; 11 bool dir = true; 12 if (a[0]

第五蓝桥杯 蚂蚁冷

蚂蚁感冒 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 长100厘米的细长直杆子上有n仅仅蚂蚁. 它们的头有的朝左,有的朝右. 每仅仅蚂蚁都仅仅能沿着杆子向前爬,速度是1厘米/秒. 当两仅仅蚂蚁碰面时.它们会同一时候掉头往相反的方向爬行. 这些蚂蚁中.有1仅仅蚂蚁感冒了.而且在和其他蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当全部蚂蚁都爬离杆子时,有多少仅仅蚂蚁患上了感冒. 输入 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接

蓝桥杯——真题训练之蚂蚁感冒

标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. [数据格式] 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100),

蓝桥杯历届《蚂蚁感冒》

问题描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. 输入格式 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝

2014蓝桥杯——感冒的蚂蚁

标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. [数据格式] 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100),

蚂蚁感冒---第五届蓝桥杯

蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. [数据格式] 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi

01_蚂蚁感冒(第五届蓝桥预赛本科B组第8题 nyoj 990)

问题来源:第五届蓝桥预赛本科B组第8题 问题描述:有在一条定长(100cm)的直杆上有n(1<n<50)只蚂蚁(每只蚂蚁的起点都不一样),他们都以相同的速度(1cm/s)向左或者向右爬, 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. 问题分析:1.两只蚂蚁碰面时,往相反方向爬行,等价于两只蚂蚁相遇后继续爬行(只不过换了蚂蚁). 2.如果感冒蚂蚁(s

SDNU 1206.蚂蚁感冒 【代码如此简单,思维练习】【7月29】

蚂蚁感冒 Description 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. Input 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi &l