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

来源:互联网 发布:淘宝违反广告法处罚 编辑:程序博客网 时间:2024/04/29 21:25

题意:
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
原创粉丝点击