目录
题目详细:
题目思路:
这个题目的关键在于对蚂蚁相遇
的时候情况的看待
两个蚂蚁相遇时候的情况
我们可以看作
他们相互穿过了彼此
假设相遇的蚂蚁其中的一只有感冒的话
相遇后就假设他们两个都变成感冒了
所以对于蚂蚁我们就只需要考虑
两种情况:
1.第一只感冒蚂蚁方向朝向的方向没有与他相反朝向的蚂蚁
这种情况,蚂蚁不会和任意一只蚂蚁相会遇见,故最终感冒的蚂蚁数目为1
2.第一只感冒蚂蚁方向朝向的方向有与他相反朝向的蚂蚁
那么这个时候就只需要考虑以第一只感冒蚂蚁为中心
两边朝向这只蚂蚁的数目就是会感冒的蚂蚁数目
具体情况大家可以通过上面提到的方法去模拟一下。
代码详解:
-
#include<iostream>
-
#include<cmath>
-
using
namespace std;
-
-
const
int N=
106;
-
int a[N];
-
int b[N];
-
int main(){
-
int n;
-
cin>>n;
-
for(
int i=
1;i<=n;i++){
-
scanf(
"%d",&a[i]);
-
if(a[i]>
0) b[i]=
1;
-
else b[i]=
-1;
-
}
-
-
int index=
abs(a[
1]);
-
-
int sum=
1;
-
int flag=
0;
-
for(
int i=
2;i<=n;i++){
-
if(
1==b[
1]&&b[i]==
-1&&index<
abs(a[i])) flag=
1;
-
-
if(
-1==b[
1]&&b[i]==
1&&index>a[i]) flag=
1;
-
}
-
-
if(
1==flag){
-
for(
int i=
2;i<=n;i++){
-
if(
abs(a[i])>index&&
-1==b[i]) sum++;
-
if(
abs(a[i])<index&&
1==b[i]) sum++;
-
}
-
}
else{
-
cout<<
1;
-
return
0;
-
}
-
cout<<sum;
-
return
0;
-
}
PS:这种脑筋急转弯的题目还是要多练一下,防止脑袋生锈(doge)
转载:https://blog.csdn.net/weixin_60536621/article/details/128438042
查看评论