zoukankan      html  css  js  c++  java
  • 第五蓝桥杯 蚂蚁冷

    蚂蚁感冒

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
    描写叙述
    长100厘米的细长直杆子上有n仅仅蚂蚁。

    它们的头有的朝左,有的朝右。

    每仅仅蚂蚁都仅仅能沿着杆子向前爬,速度是1厘米/秒。 当两仅仅蚂蚁碰面时。它们会同一时候掉头往相反的方向爬行。 这些蚂蚁中。有1仅仅蚂蚁感冒了。而且在和其他蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当全部蚂蚁都爬离杆子时,有多少仅仅蚂蚁患上了感冒。

    输入
    第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。




    接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值。表示蚂蚁离开杆子左边端点的距离。

    正值表示头朝右。负值表示头朝左,数据中不会出现0值,也不会出现两仅仅蚂蚁占用同一位置。当中,第一个数据代表的蚂蚁感冒了。

    输出
    要求输出1个整数,表示最后感冒蚂蚁的数目。
    例子输入
    3
    5 -2 8
    5
    -10 8 -20 12 25
    例子输出
    1
    3
    AC码(在蓝桥杯官网上AC了,可是NYOJ没有AC)
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    struct ants
    {
       int fx;//方向 
       int wz;//位置 
       int cx;//原来次序 
    }a[51];
    bool cmp(ants x,ants y)
    {
      return x.wz<y.wz;
    }
    int main()
    {
       int n,i,k,m,w,p,q;
       while(cin>>n)
       {
           p=q=0;
          for(i=0;i<n;i++)
          {
            cin>>k;
            a[i].cx=i;
            if(k<0)
            {
              a[i].wz=abs(k);
              a[i].fx=-1;
            } 
            else 
            {
            a[i].wz=k;
            a[i].fx=1;
            }          
          } 
          m=a[0].wz;
          sort(a,a+n,cmp);
            for(i=0;i<n;i++)
          {
            if(a[i].wz==m) 
            {
              w=i;//排序后蚂蚁的位置 
            }   
          } 
           if((w==0&&a[w].fx==-1)||(w==n-1&&a[w].fx==1))
           cout<<"1"<<endl;
           else 
           {
               if(a[w].fx==-1)
                {
                     for(i=w-1;i>=0;i--) 
                     {
                          if(a[i].fx==1)
                          p++;     
                     } 
                     for(i=w+1;i<n;i++) 
                     {
                       if(a[i].fx==-1)
                          q++;
                     } 
                                  
                 }
                else
                {
                     for(i=w+1;i<n;i++) 
                     {
                          if(a[i].fx==-1)
                          p++;     
                     } 
                     for(i=w-1;i>=0;i--) 
                     {
                          if(a[i].fx==1)
                          q++;
                     } 
                                  
                } 
                 cout<<p+q+1<<endl;          
          }
                 
      }
       return 0;
    }


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    nvm安装及使用(windon/mac)
    JVM学习笔记
    Java多线程
    OkHttpClient调优案例
    Java各版本新增特性, Since Java 8
    Linux下MySQL数据库的备份与恢复
    算法和数据结构学习笔记
    联想台式机安装网卡驱动指南
    解决「现有新的ios更新可用,请从ios14 beta 版更新」问题
    linux 命令英文全称(转帖)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4844839.html
Copyright © 2011-2022 走看看