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