poj 暴力水题
题目链接:http://poj.org/problem?id=1852
题意:木板长为n, 蚂蚁数量为k, 后面k个数,依次代表蚂蚁的位置, 当蚂蚁到达边界的时候会立马掉下,当两个蚂蚁相碰面的时候,两蚂蚁各种反向走。(蚂蚁走的方向不定,但秒速度为1) 求所有蚂蚁都掉下来的最早时间和最晚时间。
思路:最早时间很容易求,就不多说了。
对于最晚时间, 对于两个蚂蚁相碰面,两个蚂蚁各自反向走,在这里可以看成两个蚂蚁方向都不变,沿着相同方向继续行走,得到的效果是一样的。
AC代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<queue> #include<stack> #include<algorithm> #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) #define Mem0(x) memset(x,0,sizeof(x)) #define Mem1(x) memset(x,-1,sizeof(x)) #define MemX(x) memset(x,0x3f,sizeof(x)) using namespace std; typedef long long ll; const int inf=0x3f3f3f; int main() { int ans1,ans2; int t; scanf("%d",&t); while (t--){ int n,k,a,ans1=0,ans2=0; scanf("%d%d",&n,&k); for (int i=1;i<=k;i++){ scanf("%d",&a); ans1=max(ans1,min(n-a,a)); ans2=max(ans2,max(n-a,a)); } printf("%d %d\n",ans1,ans2); } return 0; }