首页 > 代码库 > 2017.5 校内预选赛 第三题 ants poj1852

2017.5 校内预选赛 第三题 ants poj1852

题目:

http://poj.org/problem?id=1852

 

只要想到点子上,很简单。

技术分享

以第一个栗子来解释:

10 3

2 6 7

按照题意 A B 相遇则A B 改变方向,其实可以看作A和B相遇穿过继续运动。

这样就最短时间 只要找到每个蚂蚁到一端的最短时间,然后找出其中的最大值

例如最短时间分别对应 2 4 3

所以结果为4

最长时间 就只要找出每个点的最长时间然后取最大值

 

代码如下(能够ac):

 

#include<iostream>
using namespace std;

int main(){
    int t;
    cin>>t;
    for(int i=1;i<=t;i++){
        int n,m;
        cin>>n>>m;
        int small=0,max=0;
        for(int j=0;j<m;j++){
            int num;
            cin>>num;
            int temp;
            temp=n-num>num ? num : n-num;
            if(small<temp) small=temp;
            
            temp=num>n-num ? num : n-num;
            if(max<temp) max=temp;        
        }
        
        cout<<small<<" "<<max<<endl; 
    }
} 

 

注意不要使用数组保存每个蚂蚁的位置,因为m最大为1000000,开不了这么大的数组。

2017.5 校内预选赛 第三题 ants poj1852