POJ-Ants-No.1852
题目描述:
链接:http://poj.org/problem?id=1852
这个题就是有n个蚂蚁在一根L米长的木棍上爬行,当爬行到端点的时候会掉下木棍,蚂蚁的朝向不确定,但是输入的一律为朝向左端的距离。
问所有蚂蚁掉下木棍的最长和最短时间为多少?
题目分析:
其实这个题只有计算每只蚂蚁距离两端的距离即可,长的是最长时间,短的是最短时间。因为当两个蚂蚁相遇时,可以将两个蚂蚁进行交换,就可以继续前行。
给出代码
#include <stdio.h>
#include <stdlib.h>
#include<memory.h>
#include <string.h>
int com(int a,int k,int l);
int num[1000010];
//unsigned long long int gcd(unsigned long long int a,unsigned long long int b);
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int l,n;
scanf("%d%d",&l,&n);
int i,j;
for(i=1;i<=n;i++)
{
scanf("%d",&num[i]);
}
int sum1=0;
for(i=1;i<=n;i++)
{
if(i==1)
sum1=com(num[i],1,l);
else
{
if(sum1<com(num[i],1,l))
sum1=com(num[i],1,l);
}
}
int sum2=0;
for(i=1;i<=n;i++)
{
if(i==1)
sum2=com(num[i],-1,l);
else
{
if(sum2<com(num[i],-1,l))
sum2=com(num[i],-1,l);
}
}
printf("%d %d\n",sum1,sum2);
}
return 0;
}
int com(int a,int k,int l)
{
if(k==1)
{
int b=l-a;
if(a>b)
return b;
else
return a;
}
else
{
int b=l-a;
if(a<b)
return b;
else
return a;
}
}