蚂蚁 uva 10881
思路:
一,两个点相撞然后,相互弹开。这样其实和两个点穿过去差不多, 但是对于单个点而言,这样肯定不行。
二,当你发现了不管什么情况,这些点的相对位置是不变的, 比如 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的更多相关文章
- cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
1456. [UVa 10881,Piotr's Ants]蚂蚁 ★ 输入文件:Ants.in 输出文件:Ants.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述 ...
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...
- UVA.10881 Piotr's Ants (思维题)
UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...
- 【UVa 10881】Piotr's Ants
Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...
- 思维题 UVA 10881 Piotr's Ants
题目传送门 /* 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 关键2:蚂蚁的相对位置不变 关键3:o ...
- [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 ...
- Uva 10881 Piotr’s Ants 蚂蚁
一根长度为 L 厘米的木棍上有 n 只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为 1 厘米/秒.当两只蚂蚁相撞时,二者同时调头(掉头用的时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算 T 秒之后 ...
- 【巧妙的模拟】【UVA 10881】 - Piotr's Ants/Piotr的蚂蚁
</pre></center><center style="font-family: Simsun;font-size:14px;"><s ...
- 蚂蚁爬杆问题 UVA 10881
算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...
随机推荐
- 关于'selffilter' is not a registered tag library. Must be one of:
报错代码: 'selffilter' is not a registered tag library. Must be one of: admin_list admin_modify admin_st ...
- AMBARI Blueprint 使用文档
Introduction Notable JIRAs API Resources and Syntax Blueprint Usage Overview Step 0: Prepare Ambari ...
- Swagger使用指南
1:认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法 ...
- SpringBoot基础系列一
SpringBoot基础知识概览 特性 核心理念:约定优于配置 特点: 1. 开箱即用,根据项目依赖自动配置 2. 功能强大的服务体系,如嵌入式服务.安全 3. 绝无代码生成,不用写.xml配置,用注 ...
- JAVA 中的接口(interface)
我们一般将一个抽象类中所有方法都是抽象方法的抽线类定义为接口,接口时由常量和抽象方法组成的特殊类,即接口里面连构造方法也没有.接口通常用“interface”关键字来声明,一个类通过继承接口的方式,从 ...
- Identity Server 4 预备知识 -- OAuth 2.0 简介
OAuth 2.0 简介 OAuth有一些定义: OAuth 2.0是一个委托协议, 它可以让那些控制资源的人允许某个应用以代表他们来访问他们控制的资源, 注意是代表这些人, 而不是假冒或模仿这些人. ...
- Python基础(解压序列)
解压序列: a,b=(1,2) # a,b=[1,2] print(a,b) #输出结果:1 2 #获取第一个值和最后一个值 a,*_,c=(1,2,3,4,5,6,7,8,9) print(a) p ...
- Python基础(迭代器)
一.迭代器 概述: 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能 ...
- Swagger如何访问Ocelot中带权限验证的API
先亮源代码:https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDe ...
- 『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)
001 Laura.SqlForever架构的基础(Laura.XtraFramework 的变迁之路) Laura.XtraFramework 到底是 做什么的? Laura.XtraFramewo ...