首页 > 编程语言 >2014 蓝桥杯 预赛 c/c++ 本科B组 第八题:蚂蚁感冒(10')(4.9更新)

2014 蓝桥杯 预赛 c/c++ 本科B组 第八题:蚂蚁感冒(10')(4.9更新)

时间:2023-07-18 18:33:03浏览次数:41  
标签:10 蚂蚁 ++ 4.9 感冒 蓝桥 int 直杆 dir


第八题:蚂蚁感冒(10')


    长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 
    每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
    当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
    这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
    请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

【数据格式】

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

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

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

例如,输入:
3
5 -2 8
程序应输出:
1

再例如,输入:
5
-10 8 -20 12 25
程序应输出:
3

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

快速解题思路:uva上有个ants,不过和这个不太一样。这里根据数据模拟比较爽一些,还是暴力。 我用dfs调的暴力。

具体思路:第一个输入时感冒的蚂蚁,它有两种方向,向左或向右。

如果它是向左的:

那么对一组输入数据,输入完之后我们可以知道,在0-100这根直杆上,分别分布着一些蚂蚁,每只蚂蚁都有一个朝向。

那么那只感冒的蚂蚁所在直杆的位置就将直杆以它为中心分成左右两部分,

因为感冒的那只是向左的,所以它左边的直杆上的蚂蚁,只要是向右的,那么到最后都会被感冒。此时,只要它的左边的直杆上有一只向右走的蚂蚁,那么它右边的直杆上向左走的蚂蚁,走到最后肯定也会被感冒。如果它左边没有一只向右走的蚂蚁,那么最后只会有它这一只感冒。


如果它是向右走的计算方法同理。


所以走到最后会被感冒的总数就是,对第一个感冒的蚂蚁,在直杆上,它要走的方向的那一边的所有蚂蚁中,向它相反的方向走的蚂蚁的总数,如果总数不为0,就再加上它在直杆的位置的右边的直杆上的蚂蚁中和它的行动方向相同的蚂蚁的总数。最后再加上它自己本身就是answer了



代码:(最后写的这题,烦躁,dfs出来了,还有7分钟,老师赶人了,就没再调试 直接提交了,艹!)


#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

#define N 100010
#define MAX 1000100

int p[MAX];
bool vis[MAX];
int dir[MAX];
int T, a, b, ans;

int main() {

    while(~scanf("%d",&T)) {
        scanf("%d",&a);
        memset(dir,0,sizeof(dir));
        if(a < 0){
            a= -a;
            dir[a] = -1;
        }
        else dir[a] = 1;
        for(int i = 1; i < T; ++i){
            scanf("%d",&b);
            
            if(b < 0){
                dir[-b] = -1;
            }
            else {
                dir[b] = 1;
            }
        }
        ans = 0;
        if(dir[a] == -1){
            for(int i = 0; i < a; ++i){
                if(dir[i]){
                    if(dir[i] == 1)ans++;
                }
            }
            if(ans){
                for(int i = a+1; i < 100; ++i){
                    if(dir[i] == -1)ans++;
                }
            }
        }
        else if(dir[a] == 1){
            for(int i = a + 1; i < 100; ++i){
                if(dir[i] == -1)ans ++;
            }
            if(ans){
                for(int i = 0; i < a; ++i){
                    if(dir[i] == 1)ans++;
                }
            }
        }
        printf("%d\n",++ans);
    }
    return 0;
}




标签:10,蚂蚁,++,4.9,感冒,蓝桥,int,直杆,dir
From: https://blog.51cto.com/u_16192154/6766706

相关文章

  • 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
    第三题:李白打酒(8')  话说大诗人李白,一生好饮。幸好他从不开车。  一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:  无事街上走,提壶去打酒。  逢店加一倍,遇花喝一斗。  这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。......
  • Databend 开源周报第 102 期
    Databend是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn。What'sOnInDatabend探索Databend本周新进展,遇到更贴近你心意的Databend。为指定列创建BloomIndex创建bloomindex将会消耗大......
  • 8-102-(LeetCode- 207&210) 课程表
    1.题目 读题  考查点 2.解法思路这个问题可以用图论的方法来解决,具体思路如下:将课程和先修课程看作有向图的节点和边,如果要学习课程ai,则必须先学习课程bi,表示为bi->ai。判断图中是否存在环,如果存在环,则说明有些课程无法完成,返回false;如果不存在环,则说明所有课程都......
  • FX110讯:ADSS正逐步关闭英国业务
    总部位于阿布扎比的零售和机构货币对及差价合约经纪商ADSS将逐步关闭其英国业务——ADSSecuritiesLondonLtd(ADSSL),以便将资源重新集中于集团内的其他实体。去年10月,Fazzaco报告称,在截至2021年12月31日的2021财年,ADSSL的收入(不包括转让定价)同比下降了34%。就在本月初,DanBenton在A......
  • leetcode104二叉树搜索
    深度优先搜索,递归maxDepth(TreeNode*root){if(!root)return0;returnmax(maxDepth(root->left),maxDepth(root->right))+1;} 广度优先搜索,队列queue<TreeNode*>q;q.push(root);while(!q.empty()){intsize=q.size();while(size>0){Tree......
  • ABS10-ASEMI迷你贴片整流桥50MIL芯片ABS10
    编辑:llABS10-ASEMI迷你贴片整流桥50MIL芯片ABS10型号:ABS10品牌:ASEMI芯片个数:4封装:MBS-4恢复时间:ns工作温度:-55°C~150°C浪涌电流:30A正向电流:1A反向耐压:1000V正向压降:1.05V引脚数量:4漏电流:>10uaABS10特性:ASEMI品牌ABS10是采用GPP工艺芯片,该芯片具有良好的稳定性及抗......
  • win10小狼毫配置实操笔记
    下载安装进入官方网站下载最新版小狼毫,安装后选择朙(明)月拼音。在配置前阅读官方文档有关用户文件夹和共享文件夹的介绍。default.yaml用来调试全局方案,定制该文件后切换其他比如五笔、双拼等方案时,其定制内容依旧适用。weasel.yaml用来修改rime的常规设置,定制外观。symbol......
  • [ABC310D] Peaceful Teams 题解
    PeacefulTeams题目大意将\(n\)个人分成\(T\)组,要求每组不能包含敌对的人,问有多少种分法。思路分析注意到\(n,T\)均很小,考虑爆搜。注意到直接枚举会枚举到分组顺序的全排列,所以可以强行嵌定大小关系去重。voiddfs(ints){if(s==n+1){for(inti=1;i<=t;......
  • 109.C++类内初始化
    109.C++类内初始化C++11规定,可以为数据成员提供一个类内初始值。创建对象时,类内初始值用于初始化数据成员。像下面这样,cursor和height的类内初始值均为0。classScreen{private: intcursor=0; intheight=0;};1.不能用圆括号给类内初始值的原因C++primer(第5版)中......
  • 107.继承总结
    107.继承总结1.概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称子类或者派生类,被继承的类称为父类或基类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过......