牛客oj 习题2.11坠落的蚂蚁(模拟) && poj1852Ants(贪心)(蚂蚁问题)

本文探讨了两种蚂蚁爬杆问题的解决方案,分别是牛客oj的习题2.11和poj1852Ants。在蚂蚁碰撞时,速度相同者会折回,而速度为0的蚂蚁会根据相邻蚂蚁数量决定方向。通过模拟和贪心算法,可以求解蚂蚁落地的时间和方向。对于模拟方法,需要考虑多种特殊情况;而贪心算法则更为简洁,通过不断寻找方向上的最值来确定答案。注意处理大数据量时,变量定义需为全局变量。
摘要由CSDN通过智能技术生成

 

两题都是蚂蚁爬杆问题。。所以放在一起了。

第一个是复试题,因为不同蚂蚁撞在一起交换速度,所以分情况,一动一不动相当于接力,两个相向相当于换位。所以对于速度为0的蚂蚁来说,如果左右两边都有一只朝自己走的蚂蚁,那方向不变但初始位置变成最后交换位置的蚂蚁初始位置。

仔细想想(想的过程就不说了)就可以变成首先计算出左右两方各有多少蚂蚁,把能够遇见的蚂蚁当成同归于尽,不动蚂蚁落下的时间就是未同归于尽第一个活着的蚂蚁落下的时间,不动蚂蚁落下的方向就是左右双方数量多的一方的方向。最后模拟即可。

 

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
#include <cmath>
#include <climits>

using namespace std;

const int INF = INT_MAX;

int FindCommon(int x, int y){
	int minabs = min(abs(x), abs(y));//找出公共部分(同归于尽部分)的绝对值 
	if(x+y > 0) return minabs+1;
	else if(x+y < 0) return -(minabs+1);
	else return 0;
}

int main(){
//	freopen("in.txt", "r", stdin);
	int N, pos, way, current, change, number, number1, number2;
	int stick[105];
	while(~scanf("%d", &am
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值