集训——挑战(P18,Poj NO.1852)

题意:
n只蚂蚁在直杆上行走,杆末端掉下。已知杆长和行进速度和蚂蚁初始位置,未知蚂蚁朝向。蚂蚁相遇则相互掉头,求最后一只蚂蚁掉下杆的最小最大可能时间。

题解:最需要理解的就是相遇时候,是一种角色互换
可以理解为:相遇时,蚂蚁走了与之相遇的蚂蚁本应该走的路。
所以最短时间是最靠近中点的蚂蚁,行走到离较近杆末端的时间
最长时间是最靠近边缘的蚂蚁,行走到离较远杆末端的时间

#include<iostream>
#include<stdio.h>
using namespace std;
void solve(int str[],int n,int L){
    int minT = 0;
    for(int i = 0; i<n; i++){
        minT = max(minT, min(str[i],L - str[i]));
    }
    int maxT = 0;
    for(int i = 0; i<n; i++){
        maxT = max(maxT,max(str[i],L - str[i]));
    }
    printf("%d %d\n", minT, maxT);

}
int main(){
    int n;
    scanf("%d",&n);
    while(n--){
        int pole_length;
        scanf("%d",&pole_length);
        //cin>>pole_length;
        int x_length;
        scanf("%d",&x_length);
        //cin>>x_length;
        int x[x_length];
        for(int i = 0; i < x_length; i++){
            scanf("%d",&x[i]);
            //cin>>x[i];
        }
        solve(x,x_length,pole_length);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值