题意:
在一条【0,right】线段上有n只蚂蚁(给坐标),蚂蚁在上面左右行走,与其它蚂蚁碰撞后就掉头走,问所有蚂蚁中到边界所需的最长路径的最小值,最段路径的最大值
思路:
蚂蚁碰撞题,跟之前的uva10881 :http://blog.youkuaiyun.com/conatic/article/details/50573660 相似,主要都是蚂蚁碰撞后会互相交换对方的路线走。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000005;
int maxn[N], minn[N];
int main() {
int cas;
scanf("%d", &cas);
while (cas--) {
int right, n;
scanf("%d%d", &right, &n);
int pos;
for (int i = 0; i < n; i++) {
scanf("%d",& pos);
maxn[i] = max(right - pos, pos);
minn[i] = min(right - pos, pos);
}
sort(maxn, maxn + n);
sort(minn, minn + n);
printf("%d %d\n", minn[n-1], maxn[n - 1]);
}
}
本文介绍了一个经典的蚂蚁碰撞问题,通过类似UVA10881的题目,详细讲解了如何利用编程解决蚂蚁在直线上的碰撞并求解最长及最短路径的问题。采用排序算法简化问题复杂度。
427

被折叠的 条评论
为什么被折叠?



