• 【纯水题】POJ 1852 Ants


    题目大意

    有一根长(L)厘米米的水平木棍上有(n)个蚂蚁,它们以每秒1cm/s的爬(fei)行(ben)到木棍的一端,之后掉下去。
    给出每个蚂蚁的起始位置,但是不知道它们爬行的方向。相向而行的两只蚂蚁相遇后,它们都会掉头往反方向走。
    求所有蚂蚁都落下木棍的最大时间和最小时间。

    输入格式

    先给出数据组数(T)
    每组第一行给出木棍长度(L)和蚂蚁数量(n)((1le nle 1000000))。
    第二行给出每个蚂蚁距离木棍左端(x)米。

    样例输入

    2
    10 3
    2 6 7
    214 7
    11 12 7 13 176 23 191

    样例输出

    4 8
    38 207

    思路

    谢谢,有被水到
    每个蚂蚁有从左和从右两种情况,不过相遇会掉头。
    但是所有蚂蚁都是同时出发,而且长得都一样(雾),所以掉头前后的情况是没有区别的。
    所以根本不用考虑掉头的情况,直接找每个蚂蚁按原路都掉下去的时间就可以了。

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int maxn=1e6+10;
    const int INF=0x3f3f3f3f;
    int l,n;
    int a[maxn];
    
    int getmin(){
    	int minans=-INF;
    	for(int i=1;i<=n;i++){
    		int mintemp=min(a[i],l-a[i]);
    		minans=max(minans,mintemp);//不要手残写成min函数
    	}
    	return minans;
    }
    
    int getmax(){
    	int maxans=-INF;
    	for(int i=1;i<=n;i++){
    		int maxtemp=max(a[i],l-a[i]);
    		maxans=max(maxans,maxtemp);
    	}
    	return maxans;
    }
    
    int main(){
    	int T;
    	scanf("%d",&T);
    	while(T--){
    		memset(a,0,sizeof(a));
    		scanf("%d%d",&l,&n);
    		for(int i=1;i<=n;i++)
    			scanf("%d",&a[i]);
    		printf("%d %d
    ",getmin(),getmax());
    	}	
    	return 0;
    }
    
  • 相关阅读:
    函数、对象
    webpack配置
    创智培训内容
    oracle方法
    Weblogic
    药店
    ip
    jdk账号
    ansible
    目录编码
  • 原文地址:https://www.cnblogs.com/Midoria7/p/12697246.html
Copyright © 2020-2023  润新知