思路:

  一,两个点相撞然后,相互弹开。这样其实和两个点穿过去差不多, 但是对于单个点而言,这样肯定不行。

  二,当你发现了不管什么情况,这些点的相对位置是不变的, 比如 1, 4, 3, 2 不管怎么移动,最后的这些点的相对位置依旧是 1, 4, 3, 2

知道了这两点,其实就可以自己动手写了。

  我是这样做的,先记录点(包括下标), 然后根据位置排序,另外一个数组存下标,然后,再算各个点在经过T时间后,各个点的位置,再根据位置排序,然后,在利用所存下标的数组进行输出。

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e5+;
struct node{
int index, x, y;
}a[maxn];
bool cmp(node a, node b){
return a.x<b.x;
}
int b[maxn], t, T, L, n, h; int main(){
cin>>t;
while(t--){
cin>>L>>T>>n;
for(int i=;i<n;++i)
{ char h;
a[i].index=i;
cin>>a[i].x>>h;
if(h=='L')a[i].y=-;
else a[i].y=;
}
sort(a, a+n, cmp);
for(int i=;i<n;++i)
b[i]=a[i].index; for(int i=;i<n;++i){
a[i].x+=a[i].y*T;
} sort(a, a+n, cmp); for(int i=;i<n;++i){
int q=i;
while(q+<n&&a[q].x==a[q+].x){++q;}
if(q!=i){
for(int j=i; j<=q;++j)a[j].y=;
}
i=q;
}
cout<<"Case #"<<++h<<":"<<endl;
for(int i=;i<n;++i){
if(a[b[i]].x>L||a[b[i]].x<)cout<<"Fell off"<<endl;
else {
cout<<a[b[i]].x<<" ";
if(a[b[i]].y==-)cout<<"L"<<endl;
else if(a[b[i]].y==) cout<<"R"<<endl;
else cout<<"Turning"<<endl;
}
}
}
}

书中的代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e4+;
struct node{
int id, p, d;
bool operator < (const node &a)const{
return p<a.p;
}
}before[maxn], after[maxn];
const char dirName[][]={"L", "Turning", "R"}; int order[maxn]; int main(){
int k;
cin>>k;
for(int kase=;kase<=k;++kase){
int L, T, n;
cout<<"Case #"<<kase<<":"<<endl;
cin>>L>>T>>n;
for(int i=;i<n;++i){
int p, d;
char c;
cin>>p>>c;
d=(c=='L'?-:);
before[i]=(node){i, p, d};
after[i]=(node){, p+T*d, d};
}
//计算order数组
sort(before, before+n);
for(int i=;i<n;++i)order[before[i].id]=i;
sort(after, after+n);
for(int i=;i<n-;++i)
if(after[i].p==after[i+].p)after[i].d=after[i+].d=; for(int i=;i<n;++i){
int a=order[i];
if(after[a].p<||after[a].p>L)cout<<"Fell off"<<endl;
else cout<<after[a].p<<" "<<dirName[after[a].d+]<<endl;
}
}
}

蚂蚁 uva 10881的更多相关文章

  1. cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁

    1456. [UVa 10881,Piotr's Ants]蚂蚁 ★   输入文件:Ants.in   输出文件:Ants.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述 ...

  2. POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题

    两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...

  3. UVA.10881 Piotr's Ants (思维题)

    UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...

  4. 【UVa 10881】Piotr's Ants

    Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...

  5. 思维题 UVA 10881 Piotr's Ants

    题目传送门 /* 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 关键2:蚂蚁的相对位置不变 关键3:o ...

  6. [ACM_模拟] UVA 10881 Piotr's Ants[蚂蚁移动 数组映射 排序技巧]

    "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one ...

  7. Uva 10881 Piotr’s Ants 蚂蚁

    一根长度为 L 厘米的木棍上有 n 只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为 1 厘米/秒.当两只蚂蚁相撞时,二者同时调头(掉头用的时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算 T 秒之后 ...

  8. 【巧妙的模拟】【UVA 10881】 - Piotr's Ants/Piotr的蚂蚁

    </pre></center><center style="font-family: Simsun;font-size:14px;"><s ...

  9. 蚂蚁爬杆问题 UVA 10881

    算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...

随机推荐

  1. 原生的 django 分页

    原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...

  2. 八问WebSocket协议:为你快速解答WebSocket热门疑问

    一.引言 WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持.它使用方面.应用广泛,已经渗透到前后端开发的各种场景中. 对http一问一答 ...

  3. MSP430F149串口收发程序的学习(一)

    首先将用到的IO口设置为第二模式: ①使用串口USART0则设置P3.4 P3.5 ,使用USART1则设置P3.6,P3.7 (P3SEL |= BIT3+BIT4:P3SEL |= BIT6+BI ...

  4. 记一次自己在Linux上倒腾Nginx的经历

    自己装了个CenterOS7.5,还装了个.NET Sdk,又装了个nginx...学会几个命令 su root rm - rf helloCore 删除文件夹及文件 输入命令行: ps -ef | ...

  5. Elasticsearch倒排索引结构

    一切设计都是为了提高搜索的性能 倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引.通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key. 先来回 ...

  6. 【Android Studio安装部署系列】三、Android Studio项目目录结构

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 简单介绍下Android studio新建项目的目录结构. 常用项目结构类型 在Android Studio中,提供了以下几种项目结 ...

  7. Flink从入门到放弃(入门篇3)-DataSetAPI

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...

  8. .NET Core和Swagger 生成 Api 文档

    测试/生产环境的BUG 这里更新一下在本地调试正常,在INT/PROD上抛错,错误信息为: */**/*.xml(Swagger json file) 文件找不到,在startup 里builder ...

  9. 并发系列(1)之 Thread 详解

    本文主要结合 java.lang.Thread 源码,梳理 Java 线程的整体脉络: 一.线程概述 对于 Java 中的线程主要是依赖于系统的 API 实现的,这一点可以从 java.lang.Th ...

  10. 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux

    情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用它的规范标准来制造应用服务器而 ...