首页 > 其他分享 >AcWing 1211:蚂蚁感冒 ← 模拟题

AcWing 1211:蚂蚁感冒 ← 模拟题

时间:2024-06-07 19:31:15浏览次数:24  
标签:1211 蚂蚁 样例 向左走 感冒 模拟题 向右走 tori AcWing

【题目来源】
https://www.acwing.com/problem/content/1213/

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

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

【输出格式】
输出1个整数,表示最后感冒蚂蚁的数目。

【数据范围】
1<n<50,
0<|Xi|<100

【输入样例1】
3
5 -2 8

【输出样例1】
1

【输入样例2】
5
-10 8 -20 12 25

【输出样例2】
3

【算法分析】
● 两只蚂蚁碰面掉头,可以看作是一只蚂蚁穿过了另一只蚂蚁。因为,碰面之后两只蚂蚁都感冒了,掉不掉头其实无所谓,毕竟都感冒了。这样分析的话,本题就简单多了。
● 依据第一只感冒的蚂蚁向左还是向右,进行分析判断。
由于蚂蚁速度相同,如果第一只感冒的蚂蚁向右,那么它右面向左走的一定会传染,右面向右走的一定不会传染,左面向左走的一定不会传染,左面向右走的会被右面向左走的被感染的感染。
如果第一只感冒的蚂蚁向左,与上同理。

若设 tori 表示第一只感冒的蚂蚁左边向右走的蚂蚁数量,tole 表示第一只感冒的蚂蚁右边向左走的蚂蚁数量,则依据上图易知,不管第一只感冒的蚂蚁向右走还是向左走,都可得 ans=tori+tole+1。其中的 1 是指第一只感冒的蚂蚁本身。
● 输入样例 1 的示意图如下所示。注意:正值表示头朝右,负值表示头朝左。


【算法代码】

#include <bits/stdc++.h>
using namespace std;

int tole,tori;

int main() {
    int n,base;
    cin>>n>>base;

    for(int i=1; i<n; i++) {
        int x;
        cin>>x;
        if(abs(x)<abs(base) && x>0) tori++; //left to right
        if(abs(x)>abs(base) && x<0) tole++; //right to left
    }

    if((base<0 && tori==0) || base>0 && tole==0) cout<<"1"<<endl;
    else cout<<tole+tori+1<<endl;

    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


 

标签:1211,蚂蚁,样例,向左走,感冒,模拟题,向右走,tori,AcWing
From: https://blog.csdn.net/hnjzsyjyj/article/details/139437256

相关文章

  • Acwing 786.第K个数
    Acwing786.第K个数题目描述786.第k个数-AcWing题库运行代码#include<iostream>#include<algorithm>usingnamespacestd;constintN=100010;intq[N];intmain(){intn,k;scanf("%d%d",&n,&k);for(inti=0;i<n......
  • acwing 242. 一个简单的整数问题
    https://www.acwing.com/problem/content/248/给定长度为N的数列A,然后输入M行操作指令。第一类指令形如Clrd,表示把数列中第l∼r个数都加d。第二类指令形如Qx,表示询问数列中第x个数的值。对于每个询问,输出一个整数表示答案。输入格式第一行包含两个整数N......
  • 快速排序——AcWing785.快速排序
    AcWing785.快速排序题目描述785.快速排序-AcWing题库运行代码#include<iostream>#include<algorithm>usingnamespacestd;constintN=1e6+6;intq[N];voidquick_sort(intq[],intl,intr){if(l>=r)return;intm=l+r>>1;//>......
  • acwing329 围栏障碍训练场 题解
    考试压轴题,意识到这题是线段树优化\(dp\)时追悔莫及。为了简化题目,我将从起点到原点变成了从原点到起点(这样就可以省去两个数组的空间)。想到设\(dp_{i,j}\)表示在第\(i\)层,奶牛们在\(j\)列时的最小移动范围,则转移方程为(设输入为\(l,r\)):\[\begin{cases}dp_{i,j}=dp_{......
  • ACWing算法基础课刷题记录2024-06-01--2day
    831.KMP字符串给定一个字符串 S......
  • ACWing算法基础课刷题记录2024-05-31--1day
    ###827.双链表###C++实现原题链接:827.双链表-AcWing题库实现一个双链表,双链表初始为空,支持 55 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k......
  • AcWing 10. 有依赖的背包问题
    https://www.acwing.com/problem/content/description/10/有N个物品和一个容量是V的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如下图所示:QQ图片20181018170337.png如果选择物品5,则必须选择物品1和2。这是因为2是5......
  • AcWing 3466. 清点代码库(STL:map,vector)
    3466.清点代码库需要求有几种不同数列,每种有多少个,可以想到用map。它的键是一个数列,可以把它放在vector里。也就是map<vector<int>,int>要满足要求的输出序列,就要想把它放在其他容器,或数组里,进行排序。因为map不能自定义排序,而且既要对值排序,还要对键排序。我起初是定......
  • 2024年PMP考生|考前必练全真模拟题,附答案解析
    需要考试资料的朋友可以加我V.X:huangwanwei99或者QQ:8692555521、在⼀家已经完成多个类似项⽬的组织⾥,项⽬经理必须执⾏⼀个新项⽬的成本估算。如果项⽬经理利⽤这些之前的⼯作作为估算当前项⽬的基础,这属于下列哪⼀个估算法?()A.三点估算法B.⾃下⽽上估算C.参数估算D.......
  • Acwing 143. 最大异或对
    题意:n个数,求任意两个数的最大异或值。思路:01前缀树总结:确定了处理01最大异或问题时,采用先bitset<32>(x).to_string()再插入和计算的方式。32位有符号整数的最大值应该是(1<<31)-1,而不是1<<32位,1<<32位代表这个1在第33位上。但是给bitset开的时候,要开到32位。此时最高位......