思路:

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

  二,当你发现了不管什么情况,这些点的相对位置是不变的, 比如 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. 视频直播 object 标签属性详解

    最近在做视频直播这一块的,html5的video不能实现此功能,在网上查找了资料,觉得很有用. 一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标签.也就是OB ...

  2. chrome谷歌开发者工具(hover时候的css样式怎么在浏览器调试)

    很多小伙伴在开发的时候,大多是在用谷歌开发者工具调试代码(快捷键F12 或 Ctrl-Shift-i). 可能会经常遇到需要调试hover样式的时候,一般都是直接改代码,然后在页面上刷新查看效果. 其 ...

  3. Java基础——集合(持续更新中)

    集合框架 Java.util.Collection Collection接口中的共性功能 1,添加 booblean add(Object obj);  往该集合中添加元素,一次添加一个 boolea ...

  4. Pytorch中torch.autograd ---backward函数的使用方法详细解析,具体例子分析

    backward函数 官方定义: torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph ...

  5. 2019-中小型公司PHP面试题目记录(附带答案)

    博主是三线省会城市的苦逼技术开发,主攻PHP方向,平时前后端语言也都有涉及,因为都是自学,上手就是框架,工作五年来基础补的不稳,换工作的时候苦不堪言,感觉一上来就问Ngnix的运行机制,php的被编译 ...

  6. 挖一挖@Bean这个东西

    有Bean得治 任何一个正常程序的访问都会在内存中创建非常多的对象,对象与对象之间还会出现很多依赖关系(一个处理业务逻辑的类中几乎都会使用到别的类的实例),一般的做法都是使用new关键字来创建对象,对 ...

  7. SmartCode 使用常见问题

    SmartCode 常见问题 SmartCode 能干什么? SmartCode = IDataSource -> IBuildTask -> IOutput => Build Ev ...

  8. FSLIB.NETWORK 简易使用指南

    1.介绍 FSLIB.NETWORK 是一款开源HTTP的高性能高易用性网络库,是对HttpWebRequest/HttpWebResponse的包装,目的是为了用起来更简单明了.设计的时候就为了提供 ...

  9. 纯CSS打造淘宝导航菜单栏

    店铺装修-PC端-基础页-首页-装修页面:编辑“菜单”模块-显示设置,粘贴如下CSS: /* 导航条背景色*/ .skin-box-bd .menu-list{background: none rep ...

  10. [Java] 为什么字符串比较不能用两个等号(==)

    Java中,使用"=="比较字符串时,判断的是两个字符串是否存放在相同的位置.如果两个字符串存放在相同的位置,那么它们就是相同的,使用"=="比较的结果也就是T ...