程序媛小秒


私信TA

用户名:uq_95485294184

访问量:1078

签 名:

等  级
排  名 5554
经  验 1527
参赛次数 0
文章发表 15
年  龄 0
在职情况 学生
学  校 武汉轻工大学
专  业

  自我简介:

026346EEA340AB7BB9A719B7B968C0B8.jpg
参考代码:

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    /* 1.蚂蚁移动碰面后转向可以理解为穿行,也就是继续沿着原来方向移动,
    不在意转向问题,区别在于,没有感染的蚂蚁相遇状态不变,相当于没有碰面,和没有碰面一样;
    而被感染的蚂蚁在碰面后,两者状态都是被感染,其余不需要在乎。
    具体可以看有个大佬画的图的题解,这样碰面后就只会影响是否被感染*/
    
    /*2.那么理解这个思维后,问题就简单了,所有蚂蚁都不会转向,如图这些蚂蚁会被感染*/
    int n;
    cin>>n;
    // 用数组装初始蚂蚁位置
    int a[50];
    int count=1;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=1;i<n;i++){
        // 注意位置的绝对值是距离杆子左端的距离,不要直接比较
        // 感染源向左,感染蚂蚁=所有向右且位置绝对值比感染源小的+向左同时位置绝对值比感染源大
        if(a[0]<0&&a[i]>0&&fabs(a[i])<fabs(a[0])||a[0]<0&&a[i]<0&&fabs(a[i])>fabs(a[0])){
            count++;
        }
        // 感染源向右,感染蚂蚁=所有向左且绝对值比感染源大的+向右同时位置绝对值比感染源小
        if(a[0]>0&&a[i]<0&&fabs(a[i])>a[0]||a[0]>0&&a[i]>0&&a[i]<a[0]){
            count++;
        }
    }
    cout<<count;
    return 0;
}


 

0.0分

2 人评分

  评论区

  • «
  • »