读书笔记<程序设计>|Ants

Ants

n只蚂蚁以每秒1cm的速度在长为Lcm的杆子上爬行。当蚂蚁爬到杆子的端点时就会掉落。由于杆子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离杆子左端的距离xi,但不知道它当前的朝向。请计算所有蚂蚁落下杆子所需的最短时间和最长时间。

限制条件:

1<=L<=10^6

1<=n<=10^6

0<=xi<=L

一般思路如下:

#include <stdio.h>
#include <stdlib.h>
#define max(x,y)   ((x>y)?x:y)
#define min(x,y)   ((x<y)?x:y)
int a[1000000];
int main(int argc, char *argv[])
{
  int maxnum=0,minnum=0;
  int i,n,l;
  scanf("%d",&l);
  scanf("%d",&n);
  for(i=0;i<n;i++){
                   scanf("%d",&a[i]);
  }
  for(i=0;i<n;i++){
                   maxnum=max(maxnum,max(l-a[i],a[i]));                 
                   minnum=max(minnum,min(l-a[i],a[i]));
  }
  printf("%d %d \n",minnum,maxnum);
  free(a);
  system("PAUSE");    
  return 0;
}

注意要点:

1.对于a[1000000]要设置为全局变量,否则程序不能运行,因为局部变量存放在内存栈中,其的大小是有限的。

2.还可以利用申明空间的方式int *a=(int*)malloc(sizeof(int)*1000000),然后free(a)。

3.时间复杂度为o(n)。

4.此题要理解题意,就好比如在最短时间内完成洗衣、做饭、烧水、敲代码。

posted @ 2016-08-15 15:52  Zero90  阅读(75)  评论(0编辑  收藏  举报