题目一:Ants

传送门

题目描述

输入

输出

样例

样例输入


样例输出

 

分析

一句话题意:有n只蚂蚁在木棍上爬行,每只蚂蚁的速度都是每秒1单位长度,现在给你所有蚂蚁初始的位置(蚂蚁运动方向未定),蚂蚁相遇会掉头反向运动,让你求出所有蚂蚁都·掉下木棍的最短时间和最长时间。

如果没有思路的话,我们可以先模拟一下

这是一个长度为10的木棍,我们假设6、8两个位置上分别有一只蚂蚁

如果它们都朝着左边走,那么6号节点上的蚂蚁需要花费6s才能从木棍上掉下来,8号节点上的蚂蚁需要花费8秒才能掉下来

如果都朝着右边走,那么6号节点上的蚂蚁需要花费4s才能从木棍上掉下来,8号节点上的蚂蚁需要花费2秒

如果6号节点朝左边走,8号节点朝右边走,那么6号节点上的蚂蚁需要花费6s才能从木棍上掉下来,8号节点上的蚂蚁需要花费2秒

以上两种情况这两只蚂蚁都不会相遇,因此我们不用考虑蚂蚁相遇的情况

那么我们来模拟一下两只蚂蚁相遇的情况

假设6号节点上的蚂蚁向右走,8号节点上的蚂蚁向左走,那么一秒后,它们将会在7号节点相遇

这是,原本在6号节点的蚂蚁会掉头向1号节点的方向走,而原本在8号节点上的蚂蚁则会掉头向10号节点的方向走

我们用蓝笔表示6号节点上的蚂蚁的运动情况,用绿笔表示8号节点上蚂蚁的运动情况

这时我们可以画出如上图的运动图像,如果还是没有看出什么的话,我们可以将上面的蓝色线与绿色线换一下颜色

这时我们发现,虽然两个蚂蚁相遇之后调转了方向,但是他们的速度并没有变

换句话说,我们可以把这个相遇折返的运动看成相遇不折返的运动

因此,我们可以无视所有的相遇,直接求每个蚂蚁到两个端点所需要的时间,最后再分别取最大值和最小值

代码

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int a[];
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(a,,sizeof(a));
int m,n;
scanf("%d%d",&m,&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+,a++n);
int mmin=-0x3f3f3f3f,mmax=-0x3f3f3f3f;
for(int i=;i<=n;i++){
mmin=max(mmin,min(a[i],m-a[i]));
mmax=max(mmax,max(a[i],m-a[i]));
}
printf("%d %d\n",mmin,mmax);
}
return ;
}

题目二:Linear world

题目描述

圆盘是平的,没有真正的地平线。任何敢于冒险的水手,如果因为长时间盯着鸡蛋和桔子,然后出发到相反的地方,很快就会明白,为什么远航的船只有时看起来像是消失在世界的边缘,是因为它们正在消失在世界的边缘。(特里·普拉切特-魔法的颜色)

不久前,人们曾经相信他们生活在二维世界里,如果他们在一个方向上旅行足够长的时间,他们会从边缘掉下来。即使证明地球是圆的,他们中的一些人仍然害怕去南半球旅行。

试着想象一个一维(线性)世界。在这样的世界上,只有两个可能的方向(左和右)。这个世界上所有的居民都是在同一时间被创造出来的,突然他们都开始向一个或另一个方向移动(都以同样的恒定速度)。如果两个居民相遇,他们礼貌地互致问候,然后转身朝相反的方向移动。当一个居民到达世界的尽头时,他就消失了。

你的任务是确定,对于给定的创造场景,哪一个居住者和何时(从创造的时刻算起)将是最后一个倒下的人。您可以假设交换问候语和转身所需的时间为0。

输入

输入由创建时刻的多个描述(数据集)组成。文件结构如下:

N
LV
DIR POS NAME
...

第一行定义了居民人数(N<32000)。以值N=0开头的数据集表示输入文件的结尾。第二条线包含世界长度L(浮标)和居民速度V(浮标)。这两个值都是正的。在接下来的N行中,关于居民的数据按POS(正方向)增加的顺序给出:

DIR–初始方向(“p”或“p”表示正方向,“n”或“n”表示负方向)

POS—创建时的位置(0<=POS<=L)

NAME–居民姓名(最多250个字符)

一行中的输入值至少用一个空格分隔,并且输入中不会有空行。您可以假设输入总是正确的,并且每个数据集只有一个唯一的解决方案。

输出

输出由每个输入数据集一行组成。第一个值应该是当最后一个居住者从创造之时起,从线性世界倒下的时间。值应在13个字符宽的字段中被截断为两个小数位。第二个值应该是居民的名字。值应使用单个空格字符分隔。

样例

样例输入

13.5
p 3.5 Smarty p Helga
n Joanna
p Venus
n Clever

样例输出

         5.00 Smarty
9.00 Venus

分析

思路和上一道题一样,不过是换了一种方式

对于这个题目,最后一个人掉落的时间显然很好确定

我们假设在碰撞过程中不交换标号,那么我们可以很容易把时间最长的人找出来

然后看在他行走的方向和他方向相反的人有几个,有多少人就会有多少次碰撞(因为速度一样),假设有k个。因为每次碰撞这个人的名字都只能传给他方向上的前面一个人,所以这个人的名字就向前面传递了k次

这道题细节比较多,大家有兴趣的话可以做一做,特别要注意的是最后的输出格式

总结

1、这种模型都可以看做两个球在碰撞之后并不返回,而是继续向前,只不过交换了一下标号

2、两个小球在碰撞后速度应该是不变的,要是改变这种方法就不适用了

弹性碰撞问题:Ants+Linear world的更多相关文章

  1. POJ 2674 Linear world(弹性碰撞)

    Linear world Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4426   Accepted: 1006 Desc ...

  2. 【AGC013C】Ants on a Circle 弹性碰撞

    题目大意 一个长度为\(lm\)的环上有\(n\)只蚂蚁,告诉你每只蚂蚁的位置和朝向,每只蚂蚁会向前爬,速度为\(1m/s\),两只蚂蚁相遇后都会掉头,问你\(t\)秒后每只蚂蚁的位置. \(n\le ...

  3. 【弹性碰撞问题】POJ 1852 Ants

    Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of ...

  4. Greedy:Linear world(POJ 2674)

      Linear world 题目大意:一些人生活在线性世界中,到达线性世界两端就会消失,两个人的前进方向有两个,相遇会改变各自相遇方向,求最后一个人掉下的人的名字和时间. 其实这一题就是弹性碰撞的模 ...

  5. 萌新笔记——Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))

    在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...

  6. 使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题

    一.前言 最近一段时间,网站经常出现两个问题: 1.内存占用率一点点增高,直到将服务器内存占满. 2.访问某个页面时,页面响应过慢,CPU居高不下. 初步判断内存一点点增多可能是因为有未释放的资源一直 ...

  7. Java实现线性阈值模型(Linear Threshold Model)

    影响力传播的线性阈值模型: 网络中连接任意两个节点u,v之间的边都有权重,任意一个节点它的各个邻居节点的边的权重之和为1,即 N(v):neighbors of v. 网络中的节点分为已激活节点和未激 ...

  8. 广义线性模型(Generalized Linear Models)

    前面的文章已经介绍了一个回归和一个分类的例子.在逻辑回归模型中我们假设: 在分类问题中我们假设: 他们都是广义线性模型中的一个例子,在理解广义线性模型之前需要先理解指数分布族. 指数分布族(The E ...

  9. 线性分式变换(linear fractional transformation)

    线性分式变换(linear fractional transformation)的名称来源于其定义的形式:(ax+b)/(cx+d),其中分子分母是线性的,然后最外层是一个分式形式,所以叫做这个名字, ...

随机推荐

  1. Fiddler13模拟弱网络环境测试

    前言现在的Android软件,基本上都会有网络请求,有些APP需要频繁的传输数据时对于网络请求的稳定性和在特殊网络条件下的兼容性有要求,但是我们在测试的时候又很难模拟那种弱网络差网络的情况,今天就给大 ...

  2. mysql基础-数据库表简单查询-记录(五)

    0x01 MySQL的查询操作 单表查询:简单查询                 多表查询:连续查询                联合查询 选择和投影 投影:挑选要符合的字段     select ...

  3. iOS-字典转模型(单模型)的实现

    用模型取代字典的好处 使用字典的坏处 一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编译器不会有任何友善提示,需要手敲, eg:dict[@"name&quo ...

  4. 详解SpringBoot(2.3)应用制作Docker镜像(官方方案)

    关于<SpringBoot-2.3容器化技术>系列 <SpringBoot-2.3容器化技术>系列,旨在和大家一起学习实践2.3版本带来的最新容器化技术,让咱们的Java应用更 ...

  5. 解析HOT原理

    2020-06-09 19:31:01 一.疑问 前段时间:QQ群里有人对“这个表(0,4)这行数据我做了update操作,查看索引的page数据,看到索引一直指向(0,4),用ctid='(0,4) ...

  6. Spring之多数据源切换的应用

    这不是一个新的知识点扩展,顶多算是,Spring的AOP特性的一个应用.那么下面开始今天的学习之旅! 场景 数据库读写分离,或者分库,总之多数据源的场景,怎么样实现自动切换(PS:不考虑各种分库分表的 ...

  7. v-on 缩写

    <!-- 完整语法 --> <a v-on:click="doSomething"></a> <!-- 缩写 --> <a @ ...

  8. @codeforces - 685C@ Optimal Point

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定若干个三维空间的点 (xi, yi, zi),求一个坐标都为 ...

  9. Oracle VM VirtualBox 连接 Centos7 minimal版

    概述: 本博客是系列博客,主要讲述在Windows环境下安装虚拟机,在虚拟机中安装lunix系统,在lunix下安装docker,在docker中安装并使用常用的开发软件,比如tomcat.redis ...

  10. PAI-AutoLearning 图像分类使用教程

    概述 PAI AutoLearning(简称PAI AL)自动学习支持在线标注.自动模型训练.超参优化以及模型评估.在平台上只需准备少量标注数据,设置训练时长即可得到深度优化的模型.同时自动学习PAI ...