飞道的博客

蚂蚁感冒(第五届蓝桥杯省赛C++A/B组)

395人阅读  评论(0)

目录

题目详细:​编辑

题目思路:

两种情况:

代码详解:


题目详细:

题目思路:

这个题目的关键在于对蚂蚁相遇

的时候情况的看待

两个蚂蚁相遇时候的情况

我们可以看作

他们相互穿过了彼此

假设相遇的蚂蚁其中的一只有感冒的话

相遇后就假设他们两个都变成感冒了

所以对于蚂蚁我们就只需要考虑

两种情况:

1.第一只感冒蚂蚁方向朝向的方向没有与他相反朝向的蚂蚁

这种情况,蚂蚁不会和任意一只蚂蚁相会遇见,故最终感冒的蚂蚁数目为1

2.第一只感冒蚂蚁方向朝向的方向有与他相反朝向的蚂蚁

那么这个时候就只需要考虑以第一只感冒蚂蚁为中心

两边朝向这只蚂蚁的数目就是会感冒的蚂蚁数目

具体情况大家可以通过上面提到的方法去模拟一下。

代码详解:


  
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. const int N= 106;
  5. int a[N];
  6. int b[N];
  7. int main(){
  8. int n;
  9. cin>>n;
  10. for( int i= 1;i<=n;i++){
  11. scanf( "%d",&a[i]);
  12. if(a[i]> 0) b[i]= 1;
  13. else b[i]= -1;
  14. }
  15. int index= abs(a[ 1]);
  16. int sum= 1;
  17. int flag= 0;
  18. for( int i= 2;i<=n;i++){
  19. if( 1==b[ 1]&&b[i]== -1&&index< abs(a[i])) flag= 1;
  20. if( -1==b[ 1]&&b[i]== 1&&index>a[i]) flag= 1;
  21. }
  22. if( 1==flag){
  23. for( int i= 2;i<=n;i++){
  24. if( abs(a[i])>index&& -1==b[i]) sum++;
  25. if( abs(a[i])<index&& 1==b[i]) sum++;
  26. }
  27. } else{
  28. cout<< 1;
  29. return 0;
  30. }
  31. cout<<sum;
  32. return 0;
  33. }

PS:这种脑筋急转弯的题目还是要多练一下,防止脑袋生锈(doge)


转载:https://blog.csdn.net/weixin_60536621/article/details/128438042
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场