uva10714 Colliding Ants

题意:在一根有限长竹竿上,有很多只蚂蚁,每只蚂蚁的爬行速度相同,但是方向是任意的,当两只蚂蚁相遇后,它们就会反向爬行,速度不变,求所有蚂蚁掉下竹竿的最早和最晚时间。

解法:乍一看很唬人,因为蚂蚁的方向是不确定的,但是试想,蚂蚁A和蚂蚁B相遇以后,各自反向,但是速度是不变的,所以我们可以视为没有相遇,只是A、B悄悄的互换了身份而已,现在的B就替A完成剩下的路,而A就替B爬。  如果A爬8s会掉下去的话,蚂蚁B和它相遇后,那么8s后B一点会掉下去。SO,最早时间就是所有蚂蚁掉落杆子最短时间中最大的时间(保证所有蚂蚁都落下去),最晚时间就是最长时间里最长的。

代码:

/*
uva10714 Colliding Ants
AC by warteac
2013-4-11
Runtime:0.280s
*/
#include<iostream>
#include<vector>
using namespace std;
class CollidingAnts{
private:
	vector <int> minTime;
	vector <int> maxTime;
	int earlist;
	int latest;
public:
	void initial();
	bool readCase();
	void computing();
	void outResult();
};
void CollidingAnts::initial(){
	minTime.clear();
	maxTime.clear();
	earlist = 0;
	latest = 0;
}
bool CollidingAnts::readCase(){	
	int poleLen,numOfAnts,m;
	cin >> poleLen >> numOfAnts;
	while(numOfAnts--){
		cin >> m;
		minTime.push_back(min( m , poleLen - m));
		maxTime.push_back(max( m , poleLen - m));
	}
}
void CollidingAnts::computing(){
    earlist = 0;latest = 0;
	for(int x = 0; x < minTime.size(); x++){
		earlist = max(earlist, minTime[x]);
	}
	for(int y = 0;y < maxTime.size(); y++){
	    latest = max(latest, maxTime[y]);
	}
	
}
void CollidingAnts::outResult(){
	cout<<earlist<<" "<<latest<<endl;
}
int main(){
	CollidingAnts ca;
	int n;
	cin >> n;
	while(n--){
	    ca.initial();
	    ca.readCase();
		ca.computing();
		ca.outResult();
	}
	
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值