3626 - 蚂蚁
时间限制 : 1 秒
内存限制 : 128 MB
一根长度为L的长细杆上有N只蚂蚁,这N只蚂蚁正在行走,所有的蚂蚁每1个单位时间走1个单位长度,当蚂蚁爬
到杆子的端点就会掉落。
因为杆子太细,所以每当有两只蚂蚁相遇的时候,他们只能沿原路返回。
初始时不知道各个蚂蚁的朝向(不知道他们是向右还是向左)
但是知道每一只蚂蚁到细杆左端的距离a[i],现在我想知道,所有蚂蚁掉下杆子所需的最短时间和最长时间。
限制:
1<=L<=10^6 1<=n<=10^6 0<=a[i]<=L
题目输入
输入一个整数T,表示有T种情况;
对于每种情况:
输入L和N,用空格隔开;
接下来输入a[i];
题目输出
对于每一种情况,输出最小时间和最大时间;
输入/输出样例
输入格式
2 10 3 2 6 7 214 7 11 12 7 13 176 23 191
输出格式
4 8 38 207
C语言解答
#include <stdio.h> int a[1000001]; int max(int a,int b) { if(a>b) return a; else return b; } int min(int a,int b) { if(a<b) return a; else return b; } int main() { int t,n,l,i,j,Min,Max; while(scanf("%d",&t)!=EOF) { for(i=1;i<=t;i++) { Min=Max=-1; scanf("%d%d",&l,&n); for(j=0;j<n;j++) scanf("%d",&a[j]); for(j=0;j<n;j++) { Min=max(Min,min(a[j],l-a[j])); Max=max(Max,max(a[j],l-a[j])); } printf("%d %d\n",Min,Max); } } return 0; }
C++解答
#include<string.h> #include<stdio.h> #include<stdlib.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int a[1000000+5]; int maxx(int a,int b){ if(a > b) return a; else return b; } int minn(int a,int b){ if(a > b) return b; else return a; } int main(){ int t; while(scanf("%d",&t)!=EOF){ while(t--){ int l,n; scanf("%d%d",&l,&n); for(int i = 0;i < n;i++) scanf("%d",&a[i]); int max = 0,min =0; for(int i = 0;i < n;i++){ int t; t = minn(l - a[i],a[i]); if(t > max) max = t; } for(int i = 0;i < n;i++){ int t; t = maxx(l - a[i],a[i]); if(t > min) min = t; } printf("%d %d\n",max,min); } } return 0; }