zoukankan      html  css  js  c++  java
  • 蚂蚁【A001】

    【1005】出自附中练习场,其他编号(1005)【难度A】—————————————————————————————————————————————————————————————————————————————————————————————

    【题目要求】有一群蚂蚁在一根水平放置的长为L cm的木棍上行走,并且每只蚂蚁的速度都固定为1 cm/s。当一只蚂蚁走到木棍的两端时就不幸地掉落了,当两只蚂蚁相碰时,它们就分别反向行走,并假设忽略相碰的时间。现在我们已知木棍的长度L,蚂蚁的只数N和每只蚂蚁在木棍上的初始位置Ai(以木棍一段为坐标原点0,另一端为木棍长度L),但是蚂蚁可以随机的选择它们的初始行走方向。你的任务是求出在所给定条件下,对蚂蚁行走方向任意的所有情况下,求出所有蚂蚁都从木棍上掉落的最早时间和最晚时间。

    【输入要求】第一行两个正整数是L(木棍长度)和N(蚂蚁只数),接着一行是N个正整数Ai(1<=i<=N,0<=Ai<=L)。(1<=L<=1000,1<=N<=1000)

    【输出要求】一行包括两个数用一个空格分隔,分别表示最早时间和最晚时间。

    【输入示例】

    10 3
    2 6 7

    【输出示例】

    4 8

    【解析】此题难度很低,但有一点必须理解,就是两只蚂蚁相撞之后什么也没发生,因为蚂蚁并不区分,不同蚂蚁掉下去并不影响结果,所以我们可以加入一些贪心算法:让最靠近某一木棍端点的蚂蚁向对面爬行,就是最晚时间,最早时间就找在中间的蚂蚁,向近的端点爬行。

    【代码】

    #include<iostream>
    
    using namespace std;
    
    int main()
    {
        int i,l,n,a[10000],min[10000],e,r;
        cin>>l>>n;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        }
        for(i=0;i<n;i++)
        {
            if(a[i]<=l/2)
                min[i]=a[i];
            else
                min[i]=l-a[i];
        }
        e=min[0];
        for(i=0;i<n;i++)
        {
           if(min[i]>e)
             e=min[i];
        }
        r=min[0];
        for(i=0;i<n;i++)
        {
           if(min[i]<r)
             r=min[i];
        }
        cout<<e<<" "<<l-r;
        //system("pause");
        return 0;
    }
    

     【注】此题已AC,代码很简单不用解释了吧。

    版权所有,转发必须标明出处,否则必须找事。

  • 相关阅读:
    【Balanced Binary Tree】cpp
    【Kernel Logistic Regression】林轩田机器学习技术
    【作业一】林轩田机器学习技术
    【Soft-Margin Support Vector Machine】林轩田机器学习技术
    【Kernal Support Vector Machine】林轩田机器学习技术
    【Dual Support Vector Machine】林轩田机器学习技法
    【Linear Support Vector Machine】林轩田机器学习技法
    【作业4】林轩田机器学习基石
    【Validation】林轩田机器学习基石
    mongodb之监控
  • 原文地址:https://www.cnblogs.com/lijiaxin-blog-cpp/p/4637185.html
Copyright © 2011-2022 走看看