POJ 1852 蚂蚁问题
/*
n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。
当蚂蚁爬到竿子的端点时就会掉落。
由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。
对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。
请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。
*/
/*
n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。
当蚂蚁爬到竿子的端点时就会掉落。
由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。
对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。
请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。
*/
#include<cstdio>
#include<iostream>
using namespace std;
#define M 1000
int L,n;
int x[M];
void solve(){//计算最短时间 ,最短时间的情况下,蚂蚁都朝着近的一段爬去,不会相遇。//求这种情况下最后一只蚂蚁落下用的时间 int minT=0;for(int i=0;i<n;i++){minT=max(minT,min(x[i],L-x[i]));}//计算最长时间,相遇时当作两只蚂蚁交错而过,可以看作独立运动。//求每只蚂蚁朝着离断点远的方向走,最后一只蚂蚁落下所用时间。 int maxT=0;for(int i=0;i<n;i++){maxT=max(maxT,max(x[i],L-x[i]));}printf("%d %d\n",minT,maxT);
}
int main(){cin>>L>>n;for(int i=0;i<n;i++){cin>>x[i];}solve();return 0;
}
然后,题被改了。
/*
n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。
由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,
我们知道它距离竿子左端的距离Xi,并知道它初始的朝向。
请计算 最后落下的蚂蚁编号和落下的时间。
输入第一行,第一个数是L,第二个数是n,接下来一行是2n个整数,每个数之间有空格隔开,每两个数表示一只蚂蚁的Xi和它的朝向,1表示向前(即向X比较大的方向),0表示向后(即向X=0的方向)
输出两个整数,最后落下的蚂蚁号(从0开始记)和最后的时间,不要回车,如果有多个最后落下的蚂蚁,输出编号最大的。
样例输入:
39 4
19 1 10 0 14 1 25 0
输出样例:
2 25
*/
这个是用最冒泡法排的顺序
/*
n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。
由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。
对于每只蚂蚁,我们知道它距离竿子左端的距离Xi,并知道它初始的朝向。
请计算:最后落下的蚂蚁编号和落下的时间。
输入第一行,第一个数是L,第二个数是n,接下来一行是2n个整数,
每个数之间有空格隔开,每两个数表示一只蚂蚁的Xi和它的朝向,
1表示向前(即向X比较大的方向),0表示向后(即向X=0的方向)
输出两个整数,最后落下的蚂蚁号(从0开始记)和最后的时间,不要回车,
如果有多个最后落下的蚂蚁,输出编号最大的。
样例输入:
39 4
19 1 10 0 14 1 25 0
输出样例:
2 25
*/
#include<cstdio>
#include<iostream>
using namespace std;
#define M 5000
int L,n;
int x[M],d[M];
void solve(){int maxT=0,T,temp;for(int i=0;i<n;i++){if(d[i]==0) T=x[i];else T=L-x[i];maxT=max(maxT,T);}//求最后一只蚂蚁掉落时的时间 for(int i=0;i<n;i++){if(d[i]==0) x[i]=x[i]-maxT;else x[i]=x[i]+maxT;}//求在maxT时,各只蚂蚁的位置(假设蚂蚁仍旧在这条直线上) for(int i=0;i<n-1;i++){for(int j=0;j<n-i-1;j++){if(x[j]>x[j+1]){temp=x[j];x[j]=x[j+1];x[j+1]=temp;}}}//抽签法求顺序,用<algorithm>库中的sort函数更好for(int i=0;i<n;i++){if(x[i]==0||x[i]==L) temp=i;}cout<<temp<<' '<<maxT;
}
int main(){cin>>L>>n;for(int i=0;i<n;i++){cin>>x[i]>>d[i];}solve();return 0;
}
然后其实有一个神仙函数很好用sort()
/*
n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。
由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。
对于每只蚂蚁,我们知道它距离竿子左端的距离Xi,并知道它初始的朝向。
请计算:最后落下的蚂蚁编号和落下的时间。
输入第一行,第一个数是L,第二个数是n,接下来一行是2n个整数,
每个数之间有空格隔开,每两个数表示一只蚂蚁的Xi和它的朝向,
1表示向前(即向X比较大的方向),0表示向后(即向X=0的方向)
输出两个整数,最后落下的蚂蚁号(从0开始记)和最后的时间,不要回车,
如果有多个最后落下的蚂蚁,输出编号最大的。
样例输入:
39 4
19 1 10 0 14 1 25 0
输出样例:
2 25
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define M 5000
int L,n;
int x[M],d[M];
void solve(){int maxT=0,T,temp;for(int i=0;i<n;i++){if(d[i]==0) T=x[i];else T=L-x[i];maxT=max(maxT,T);}//求最后一只蚂蚁掉落时的时间 for(int i=0;i<n;i++){if(d[i]==0) x[i]=x[i]-maxT;else x[i]=x[i]+maxT;}//求在maxT时,各只蚂蚁的位置(假设蚂蚁仍旧在这条直线上) sort(x,x+n);//用<algorithm>库中的sort函数对数组进行排序for(int i=0;i<n;i++){if(x[i]==0||x[i]==L) temp=i;}cout<<temp<<' '<<maxT;
}
int main(){cin>>L>>n;for(int i=0;i<n;i++){cin>>x[i]>>d[i];}solve();return 0;
}
先这样了,有优化的话再更新。
POJ 1852 蚂蚁问题相关推荐
- poj 1852 Ants
题目:http://poj.org/problem?id=1852 本题如果从常规的思想出发去解决问题是比较复杂的,而且时间复杂度会比较高,极有可能超时,但本书给出了一个非常巧妙的解法,程序简单易懂, ...
- 【ACM】POJ 1852
[问题描述] 一队蚂蚁在一根水平杆上行走,每只蚂蚁固定速度 1cm/s. 当一只蚂蚁走到杆的尽头时,立即从秆上掉落. 当两只蚂蚁相遇时它们会掉头向相反的方向前进. 我们知道每只蚂蚁在杆上的初始位置, ...
- poj 1852 Ants_贪心
题目大意:很多的蚂蚁都在长度为L(cm)的膀子上爬行,它们的速度都是1cm/s,到了棒子终端的时候,蚂蚁就会掉下去.如果在爬行途中遇到其他蚂蚁,两只蚂蚁的方向都会逆转.已知蚂蚁在棒子的最初位置坐标,但 ...
- POJ 1852 Ants O(n)
题目: 思路:蚂蚁相碰和不相碰的情况是一样的,相当于交换位置继续走. 代码: #include <iostream> #include <cstdio> #include &l ...
- POJ 1852 Ants 分析
1.暴搜 每只蚂蚁朝向有两种,可以枚举n只蚂蚁的朝向,然后模拟蚂蚁相遇的情景,总共2^n中情况. 2.分析ants相碰的情况: (a->) (<-b) 变成 (<-a)(b-> ...
- Ants(POJ 1852)
题目大意:一个蚂蚁群在一个杆子上爬,爬到杆子的末端时就会掉落,如果两只蚂蚁碰面,那么两只蚂蚁会反向走,问所有蚂蚁掉落的最短时间和最长时间.我们已知杆子的长度和蚂蚁的数量和每只蚂蚁的位置(即其距离杆子左 ...
- 【题解】POJ 1852 Ants(搜索)
POJ1852 Ants 目录 POJ1852 Ants 原题 题意 题解 原题 An army of ants walk on a horizontal pole of length l cm, e ...
- 水题/poj 1852 Ants
1 /* 2 PROBLEM:poj1852 3 AUTHER:Nicole 4 MEMO:水题 5 */ 6 #include<cstdio> 7 using namespace std ...
- 【思维】Hzy's Rabbit Stick
题目描述 给兔兔们染完颜色后,Hzy把n只颜色不同的兔兔放在了一根长度为L=10n的木棍的不同位置(每只兔兔的位置在[0,L]之间)上,让她们做做运动. 在最开始的时候,Hzy会给每只兔兔指定一个方向 ...
最新文章
- 可心耳语-属于网络工程师的人声电台(第一期)
- 【项目管理】工件清单说明
- 【面试相关】非计算机专业如何1年内自学拿到算法offer
- JavaScript事件处理的例子:事件捕捉和冒泡 - event capture and bubble
- P5546-[POI2000]公共串【SAM】
- windows10 安装mqtt服务器和client客户端进行本地调试
- android动态渐变button,Android--自定义Button的样式以及动态渐变效果
- 如何确定oracle进程,Oracle DBWR进程的工作流程以及和其他进程的协调工作!
- Centos7安装mongodb
- csrf防御 php,跨站请求伪造CSRF的防御实例(PHP版本)
- 免费的matlab程序学习下载网站总结
- chrome浏览器书签同步_如何将Google Chrome浏览器的书签与手机同步
- 用python做探索性因子分析(Exploratory Factor Analysis,EFA)全代码
- 帝国cms如何给网站添加百度统计代码,百度统计安装教程步骤分享
- 转:关于ASP操作Access数据库时出现死锁.ldb的解决方法
- 妈妈试试这样给宝宝穿衣
- FFmpeg av_dump_format输出的tbn、tbc、tbr、PAR、DAR的含义
- SK-YCC营销软件让我业务量上一台阶
- 微信公众号开发(六)-- 关注公众号自动回复两条消息
- Y6000五口千兆网口5G工业路由器
热门文章
- [编程学习][算法学习][算法问题]L形砖拼缺一个口的国际象棋盘
- [Android Studio]布局文件错误“No orientation specified, and the default is horizontal.This is a common ...“
- 访问海康nvr的接口:/ISAPI/System/Video/inputs/channels/1/overlays 发现返回403,请问代码如何写返回是200...
- 北邮计算机系最新消息,北邮、中央财大、贸大的这几类专业不输清华、北大!毕业工资高!...
- Selenium 八大定位,滚雪球学 Python 番外系列
- json-rpc 调用btc、usdt钱包节点 java
- 解决语言障碍:如何将Axure变为中文版?
- zeoslib:取得数据库中某张表的主关键字
- vue页面自适应屏幕宽高_Vue 实现大屏页面的屏幕自适应
- 计算机操作高级理论知识,计算机操作高级理论知识复习题全部.doc