zoukankan      html  css  js  c++  java
  • 【纯水题】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;
    }
    
  • 相关阅读:
    WannaCry蠕虫分析与预防
    对网络传输的理解
    RESTful API 设计最佳实践
    码农们的密码
    腾讯云公网负载均衡技术实现详解
    ELK统一日志系统的应用
    ElasticSearch + Canal 开发千万级的实时搜索系统
    聊架构:5分钟了解REST架构
    Netty5 HTTP协议栈浅析与实践
    这里,彻底了解HTTPS
  • 原文地址:https://www.cnblogs.com/Midoria7/p/12697246.html
Copyright © 2011-2022 走看看