蚂蚁 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
算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...
随机推荐
- pytest进阶之conftest.py
前言 前面几篇随笔基本上已经了解了pytest 命令使用,收集用例,finxture使用及作用范围,今天简单介绍一下conftest.py文件的作用和实际项目中如是使用此文件! 实例场景 首先们思考这 ...
- IIS Express 配置缓存位置
Please refer to the three configure files to check if they contains the rule setting. "%Program ...
- 【死磕 Spring】----- IOC 之 Spring 统一资源加载策略
原文出自:http://cmsblogs.com 在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Reso ...
- numpy操作
python中使用了numpy的一些操作,特此记录下来: 生成矩阵,替换值 import numpy as np # 生成一行10列的矩阵 dataset = np.zeros((1, 10)) # ...
- 日吞吐万亿,腾讯云时序数据库CTSDB解密
一.背景 随着移动互联网.物联网.大数据等行业的高速发展,数据在持续的以指数级的速度增长,比如我们使用手机访问互网络时的行为数据,各种可穿戴设备上报的状态数据,工厂中设备传感器采集的指标数据,传统互联 ...
- 使用 线性规划 解决 数字 排序问题, +Leapms模型
问题 将如下一组数字从大到小排序. {10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44} 解决办法 建立数学模型,给出各个数字的次序值. ...
- Linux最小系统移植之早期打印CONFIG_EARLY_PRINTK
请先参考先前博文: Linux最小系统移植之早期打印CONFIG_DEBUG_LL , 因为eraly_printk其实就是对printch()封装的 一. 必要选项(在上面链接选中的前提下再新增 ...
- Vmware虚拟机中CentOS7与Docker安装图文教程
1.安装VMware 下载一个软件安装: 2.新建一个虚拟机 等待自动安装完成 配置系统语言: 配置系统时间: 配置系统键盘: 语言支持: 默认自动使用安装源: 配置软件环境,需要及时添加的软件,这里 ...
- Webpack 4教程:为什么要优化代码
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://wanago.io/2018/07/30/webpack-4-course-part ...
- java----静态代理
静态代理没啥好说的,直接上代码 package com.yk.aop.staticproxy; import org.junit.jupiter.api.Test; //1.接口 public int ...