/*
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 蚂蚁问题相关推荐

  1. poj 1852 Ants

    题目:http://poj.org/problem?id=1852 本题如果从常规的思想出发去解决问题是比较复杂的,而且时间复杂度会比较高,极有可能超时,但本书给出了一个非常巧妙的解法,程序简单易懂, ...

  2. 【ACM】POJ 1852

    [问题描述] 一队蚂蚁在一根水平杆上行走,每只蚂蚁固定速度 1cm/s. 当一只蚂蚁走到杆的尽头时,立即从秆上掉落. 当两只蚂蚁相遇时它们会掉头向相反的方向前进. 我们知道每只蚂蚁在杆上的初始位置, ...

  3. poj 1852 Ants_贪心

    题目大意:很多的蚂蚁都在长度为L(cm)的膀子上爬行,它们的速度都是1cm/s,到了棒子终端的时候,蚂蚁就会掉下去.如果在爬行途中遇到其他蚂蚁,两只蚂蚁的方向都会逆转.已知蚂蚁在棒子的最初位置坐标,但 ...

  4. POJ 1852 Ants O(n)

    题目: 思路:蚂蚁相碰和不相碰的情况是一样的,相当于交换位置继续走. 代码: #include <iostream> #include <cstdio> #include &l ...

  5. POJ 1852 Ants 分析

    1.暴搜 每只蚂蚁朝向有两种,可以枚举n只蚂蚁的朝向,然后模拟蚂蚁相遇的情景,总共2^n中情况. 2.分析ants相碰的情况: (a->)  (<-b) 变成 (<-a)(b-> ...

  6. Ants(POJ 1852)

    题目大意:一个蚂蚁群在一个杆子上爬,爬到杆子的末端时就会掉落,如果两只蚂蚁碰面,那么两只蚂蚁会反向走,问所有蚂蚁掉落的最短时间和最长时间.我们已知杆子的长度和蚂蚁的数量和每只蚂蚁的位置(即其距离杆子左 ...

  7. 【题解】POJ 1852 Ants(搜索)

    POJ1852 Ants 目录 POJ1852 Ants 原题 题意 题解 原题 An army of ants walk on a horizontal pole of length l cm, e ...

  8. 水题/poj 1852 Ants

    1 /* 2 PROBLEM:poj1852 3 AUTHER:Nicole 4 MEMO:水题 5 */ 6 #include<cstdio> 7 using namespace std ...

  9. 【思维】Hzy's Rabbit Stick

    题目描述 给兔兔们染完颜色后,Hzy把n只颜色不同的兔兔放在了一根长度为L=10n的木棍的不同位置(每只兔兔的位置在[0,L]之间)上,让她们做做运动. 在最开始的时候,Hzy会给每只兔兔指定一个方向 ...

最新文章

  1. 可心耳语-属于网络工程师的人声电台(第一期)
  2. 【项目管理】工件清单说明
  3. 【面试相关】非计算机专业如何1年内自学拿到算法offer
  4. JavaScript事件处理的例子:事件捕捉和冒泡 - event capture and bubble
  5. P5546-[POI2000]公共串【SAM】
  6. windows10 安装mqtt服务器和client客户端进行本地调试
  7. android动态渐变button,Android--自定义Button的样式以及动态渐变效果
  8. 如何确定oracle进程,Oracle DBWR进程的工作流程以及和其他进程的协调工作!
  9. Centos7安装mongodb
  10. csrf防御 php,跨站请求伪造CSRF的防御实例(PHP版本)
  11. 免费的matlab程序学习下载网站总结
  12. chrome浏览器书签同步_如何将Google Chrome浏览器的书签与手机同步
  13. 用python做探索性因子分析(Exploratory Factor Analysis,EFA)全代码
  14. 帝国cms如何给网站添加百度统计代码,百度统计安装教程步骤分享
  15. 转:关于ASP操作Access数据库时出现死锁.ldb的解决方法
  16. 妈妈试试这样给宝宝穿衣
  17. FFmpeg av_dump_format输出的tbn、tbc、tbr、PAR、DAR的含义
  18. SK-YCC营销软件让我业务量上一台阶
  19. 微信公众号开发(六)-- 关注公众号自动回复两条消息
  20. Y6000五口千兆网口5G工业路由器

热门文章

  1. [编程学习][算法学习][算法问题]L形砖拼缺一个口的国际象棋盘
  2. [Android Studio]布局文件错误“No orientation specified, and the default is horizontal.This is a common ...“
  3. 访问海康nvr的接口:/ISAPI/System/Video/inputs/channels/1/overlays 发现返回403,请问代码如何写返回是200...
  4. 北邮计算机系最新消息,北邮、中央财大、贸大的这几类专业不输清华、北大!毕业工资高!...
  5. Selenium 八大定位,滚雪球学 Python 番外系列
  6. json-rpc 调用btc、usdt钱包节点 java
  7. 解决语言障碍:如何将Axure变为中文版?
  8. zeoslib:取得数据库中某张表的主关键字
  9. vue页面自适应屏幕宽高_Vue 实现大屏页面的屏幕自适应
  10. 计算机操作高级理论知识,计算机操作高级理论知识复习题全部.doc