码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-15 15:59:18      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

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.此题要理解题意,就好比如在最短时间内完成洗衣、做饭、烧水、敲代码。

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

标签:

原文地址:http://www.cnblogs.com/if-else/p/5773243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!