博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 10714 Ants
阅读量:6812 次
发布时间:2019-06-26

本文共 1232 字,大约阅读时间需要 4 分钟。

找规律题?YY题?

题意:给出一条线的长度L(直线在[0,L]),和蚂蚁数,下面m个数字表示m个蚂蚁的起始位置(整数,坐标),所有蚂蚁向哪边走不确定,但是两个蚂蚁相撞会掉头走。蚂蚁的速度1cm/s,蚂蚁没有长度是一个点,另外蚂蚁走到直线的两个尽头就会掉下去。问怎么走,所有蚂蚁最快掉下去,输出时间(所有蚂蚁都掉下去后再输出时间而不是第一个掉下去就输出),然后怎么走最晚掉下去,输出所有蚂蚁都掉下去的时间

这题真想不到什么算法,不过可以确定一些基本的策略

1.最快掉下去:以中点为轴,位于两端的蚂蚁都向两端走,这样他们不会发生任何的碰头,直接全部掉下去,那么最后掉下去的蚂蚁,是离中点最近的蚂蚁,它是最后掉下去的,它掉下去的时间就是所有蚂蚁都掉下去的时间

2.最慢掉下去:如果蚂蚁个数为偶数,则全部往中间收拢,期间发生相互碰撞,直到全部蚂蚁都掉下去,这样是最晚的。如果蚂蚁个数是奇数且>1,那么成对成对地取蚂蚁,从最外面开始取,每对蚂蚁都向中间靠拢,那么会剩下一个蚂蚁在最中间,它两边有两只蚂蚁,向离他远的那只移动,然后相互碰撞只到全部蚂蚁掉下去。蚂蚁个数为1,这个容易,朝离他较远的端点移动即可

 

基于上面的策略还不能解题,但是能发现想个规律

1.有m只蚂蚁,以最快方式和最慢方式走,两种方式每只蚂蚁走的路程全部加起来,刚好是m*L

2.基于上面的结论,如果有灵感,会发现用同样的方式走,但是蚂蚁相碰不掉头的话,全部加起来的路程和还是m*L

3.也就是说,掉头和不掉头是等价的?

 

最后得到这个结论,掉头和不掉头是等价,利用这个结论,可以快速找到答案

1.最快:找出最靠近中间的点,它走到离它最近的端点的时间就是全部蚂蚁掉下去的时间

2.最慢:对于每个点,找出它到两个端点的最远距离(二取一),然后在所有顶点中找一个最大值,(可以知道其实就是找最外围的点,找其中一个),它掉下去的时间就是所有蚂蚁都掉下去的时间

 

#include 
#include
#include
#include
using namespace std;#define N 1000010#define INF 0x3f3f3f3f//int a[N];int n;int main(){ int T; scanf("%d",&T); while(T--) { double len,mid; double a,tmp,Max; double Min,pos; scanf("%lf%d",&len,&n); mid=len/2; Max=-INF; Min=INF; for(int i=0; i

 

最后还是把这题归类在数学找规律下面吧………………

转载地址:http://fswzl.baihongyu.com/

你可能感兴趣的文章
PopupWindow 使用详解(一) 中文API 文档 赠送 ListPopupWindow 中文 API
查看>>
【JavaScript】通过封装自己的JSONP解决浏览器的跨域问题(Ajax跨域)
查看>>
企业公有云服务的构建“捷径”,看这一篇文章就够了
查看>>
专注“智造”,李群自动化获亿元级C轮融资
查看>>
[剑指offer] 和为S的两个数字
查看>>
EntityFramework实现增删改查
查看>>
Android 自用 App保活——音乐播放保活适配8.0 (贼好用)
查看>>
Gradle基础语法Groovy
查看>>
如何快速学习数据挖掘,机器学习,人工智能?
查看>>
程序媛成长纪:从DBA到研发工程师
查看>>
线程的几种状态转换 sinat_36042530 0...
查看>>
揭秘 Google Titan M 芯片:Pixel 3 的终极保镖是如何炼成的?
查看>>
设置外部查找工具来索引 Confluence 6
查看>>
如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (三)
查看>>
Webpack 和 Gulp 构建伪命令行项目
查看>>
在线面试, 前端, 提纲, 草稿
查看>>
hive_异常_01_ Terminal initialization failed; falling back to unsupported
查看>>
分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器
查看>>
pycharm2017 pro激活码
查看>>
自助搭建git服务
查看>>