Ants POJ NO.1852

竞赛
Ants

在这里插入图片描述
方法一:穷竭搜索
蚂蚁的朝向有两种情况,n只蚂蚁一共2^n种情况
呈指数递增,不适用
方案二:分情况
最短时间:蚂蚁背朝背向距离最近的一端走>>找到距离棍子端点最远的
最长时间:蚂蚁相遇后折返
在讨论所有蚂蚁的时间时,将所有蚂蚁看成一个整体,相当于蚂蚁相遇后交错而行>>找离端点最远的蚂蚁
在这里插入图片描述

#include<iostream>
using namespace std;
int l;
int main()
{
	int n, * p;
	cout << "输入蚂蚁个数n" << endl;
	cin >> n;
	p = new int [n];
	cout << "input the length of the pole" << endl;
	 cin >> l;
	 cout << "input the site of each ants";
	for (int i = 0; i < n; i++)
	{
		cin >> p[i];
	}
	int max=0,min;//求最长最短时间
	int smax(int n);
	int smin(int n);
	min = smin(p[0]);
	for (int i = 0; i < n; i++)
	{
		
		if (max < smax(p[i]))max = smax(p[i]);
		if (min < smin(p[i]))min = smin(p[i]);
	}
	cout << "max:"<<max << endl <<"min:"<< min << endl;
	delete []p;
}
int smax(int n)
{
	if (n < l / 2)return l - n;
	else return n;
}
int smin(int n)
{
	if (n < l / 2)return n;
	else return l - n;
}


用smax,smin函数分别寻找时间最长和最短的情况
而在main函数中的循环查找中,max和min都使用<
if (max < smax(p[i]))max = smax(p[i]);
if (min < smin(p[i]))min = smin(p[i]);
需要注意:题目求的是所有蚂蚁的时间,在寻找用时最短的时候找用时最长的蚂蚁
总结为:

max=max(max,max(p[i],l-p[i]);
min=max(min,min(p[i],l-p[i]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值