蚂蚁 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
算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...
随机推荐
- js复制粘贴模板
<script> //绑定在了body上,也可以绑定在其他可用元素行,但是不是所有元素都支持copy和past事件. /* $(document.body).bind({ copy: fu ...
- 【js】项目中有关时间的问题
一.时间戳 简单讲,unix时间戳就是从1970-01-01开始所经过的秒数,什么时候获取时间戳,就是到那个时间点所经历的秒数. 二.JavaScript获取时间戳 根据时间戳的定义,可以使用java ...
- jquery ajax跨域请求后台的简单例子
一.简介AJAX 是与服务器交换数据的技术,它在不重载全部页面的情况下,实现了对部分网页的更新. ajax() 方法通过 HTTP 请求加载远程数据. 该方法是 jQuery 底层 AJAX 实现.简 ...
- java jdk动态代理模式举例浅析
代理模式概述 代理模式是为了提供额外或不同的操作,而插入的用来替代”实际”对象的对象,这些操作涉及到与”实际”对象的通信,因此代理通常充当中间人角色. java中常用的动态代理模式为jdk动态代理和c ...
- 聊聊分布式开发 Spring Cloud
概述 本文章只是简单介绍了微服务开发的一些关键词,如果需要知道具体实现和可以评论留言 我会及时的增加连接写出具体实现(感觉没人看 就没写具体实现). 持续更新中...... SpringCloud和D ...
- chrome谷歌开发者工具(hover时候的css样式怎么在浏览器调试)
很多小伙伴在开发的时候,大多是在用谷歌开发者工具调试代码(快捷键F12 或 Ctrl-Shift-i). 可能会经常遇到需要调试hover样式的时候,一般都是直接改代码,然后在页面上刷新查看效果. 其 ...
- MappedByteBuffer
计算机内存管理 原文链接 https://www.cnblogs.com/guozp/p/10470431.html MMC:CPU的内存管理单元. 物理内存:即内存条的内存空间. 虚拟内存:计算机系 ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
- Virtual Box虚拟机Ubuntu18.X系统安装及Mysql基本开发配置
Linux简介 什么是 Linux? Linux:世界上不仅只有一个 Windows 操作系统,还有 Linux.mac.Unix 等操作系统.桌面操作系统下 Windows 是霸主,而 Linux ...
- 网站HTTP升级HTTPS完全配置手册
本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 今天,所有使用Google Chrome稳定版的用户迎来了v68正式 ...