首页 > 其他 > 详细

蓝桥杯-蚂蚁感冒

时间:2015-03-27 19:36:05      阅读:320      评论:0      收藏:0      [点我收藏+]

模拟了两个小时都没模拟出来,好复杂,百度了一下根本不用模拟,把两个相遇的蚂蚁视为穿行就可以了,汗,这样可以看成追击问题,所有右边向右和左边向左的蚂蚁都不会感冒,原先的代码仅考虑左边向右和右边向左就认为它会和其他蚂蚁碰面是错的,提交竟然通过了,汗!!!!

比如说6 5 4,  5 4都比6小,都向右走,但并不会碰面,所以还应该排除两种不存在穿行的情况

技术分享
//只简单考虑了会发生穿行的情况
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int a[110];
    int n, m, gan;
    int sum = 1;
    cin >> n; 
    
    cin >> m;   
    gan = abs(m);
    for(int i = 1 ; i < n; i++)
    {
            cin >> m;
            if(abs(m) < gan && m > 0)
               ++sum;
            if(abs(m) > gan  && m < 0)
               ++sum;
    }   
    cout << sum  << endl;
  return 0;
}    
   
错误代码

 

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int a[110];
    int n, m, gan;
    int sum = 1;
    cin >> n;
    int sign = 1;
    for(int i = 0 ; i < n; i++)
    {
        cin >> a[i];
    }
    for(int i = 1; i < n; i++)
      if(abs(a[i]) > abs(a[0]) && a[i] * a[0] > 0 && !sign)
         sign = 0;
      else
         {
              sign = 1;
              break;
          }  
    for(int i = 1; i < n; i++)
      if(abs(a[i]) < abs(a[0]) && a[i] * a[0] > 0 && !sign)
         sign = 0;
      else
         {
              sign = 1;
              break;
         }
     if(sign)
     {
              for(int i = 1; i < n; i++)
                if(abs(a[i]) > abs(a[0])&& a[i] < 0)
                   ++sum ;
                 else
                    if(abs(a[i]) < abs(a[0])&& a[i] > 0)
                      ++sum ;
      }                
               
    cout << sum  << endl;
    //system("pause");
  return 0;
}    
        #include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int a[110];
    int n, m, gan;
    int sum = 1;
    cin >> n;
    int sign = 1;
    for(int i = 0 ; i < n; i++)
    {
        cin >> a[i];
    }
    for(int i = 1; i < n; i++)
      if(abs(a[i]) > abs(a[0]) && a[i] * a[0] > 0 && !sign)
         sign = 0;
      else
         {
              sign = 1;
              break;
          }  
    for(int i = 1; i < n; i++)
      if(abs(a[i]) < abs(a[0]) && a[i] * a[0] > 0 && !sign)
         sign = 0;
      else
         {
              sign = 1;
              break;
         }
     if(sign)
     {
              for(int i = 1; i < n; i++)
                if(abs(a[i]) > abs(a[0])&& a[i] < 0)
                   ++sum ;
                 else
                    if(abs(a[i]) < abs(a[0])&& a[i] > 0)
                      ++sum ;
      }                
               
    cout << sum  << endl;
    //system("pause");
  return 0;
}    
       

 观察分析有时候比模拟更重要

蓝桥杯-蚂蚁感冒

原文:http://www.cnblogs.com/ekinzhang/p/4372377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!