蚂蚁(思维)
时间:2022-07-28
本文章向大家介绍蚂蚁(思维),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意描述
有许多蚂蚁在一根无限长的木棍上,每一只蚂蚁都有一个初始位置和初始朝向(任意两只蚂蚁的初始位置不同)。蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计)。现给出每只蚂蚁的初始位置和初始朝向,请你计算出它们在 t 秒后的位置和朝向。
思路
通过观察我们可以发现两个性质: 1.如果两只蚂蚁碰头以后,我们可以不让他们掉头,而是交换两只蚂蚁的灵魂,让他们继续往前走 2.在限定秒速走完以后,每个蚂蚁仍是按照初始时的顺序排列 明白这两个性质后就容易想了,我们可以先按初始位置排序,然后模拟每只蚂蚁的行走轨迹,再使用一个数组来记录排序后所对应的下标,判断是否正在掉头可以使用map数组,如果一个点上有多只蚂蚁,则它们正在掉头。这样就不用考虑掉头,大大简化了问题。
AC代码
#include<bits/stdc++.h>
#define x first
#define y second
#define IOS ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef unsigned long long ULL;
typedef pair<int,int> PII;
typedef pair<long,long> PLL;
typedef pair<char,char> PCC;
typedef long long LL;
const int N=2*1e5+10;
const int M=150;
const int INF=0x3f3f3f3f;
const int MOD=998244353;
int n,t;
struct node{
int point,dir,idx;
}Node[N];
bool cmp(node A,node B){
return A.point<B.point;
}
map<int,int> cnt;
map<int,int> pos;
void solve(){
cin>>n>>t;
for(int i=0;i<n;i++){
cin>>Node[i].point>>Node[i].dir;
Node[i].idx=i;
}
sort(Node,Node+n,cmp);
for(int i=0;i<n;i++){
Node[i].point+=Node[i].dir*t;
cnt[Node[i].point]++;
pos[Node[i].idx]=i;
}
sort(Node,Node+n,cmp);
for(int i=0;i<n;i++){
cout<<Node[pos[i]].point<<' ';
if(cnt[Node[pos[i]].point]!=1) cout<<0<<endl;
else cout<<Node[pos[i]].dir<<endl;
}
}
int main(){
IOS;
solve();
return 0;
}
- 工信部:网络强国建设2018年重点工作任务
- 刚刚!张小龙再出重磅!微信小程序掀起新零售红利狂潮!
- 无人驾驶系列——深度学习笔记:Tensorflow的安装-windows系统
- 2018年12大顶级云安全威胁
- 缤果盒子为域名意识打call 六位数秒下bingobox.com
- 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)
- 用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)
- 用Qt写软件系列三:一个简单的系统工具(上)
- ChartDirector应用笔记(三)
- 汇编语言 手记9
- 程序员一年写百万行代码是什么体验?这肯定是个Bug
- ChartDirector应用笔记(二)
- ChartDirector应用笔记(一)
- DB Cache
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- vim 后门 | Linux 后门系列
- 个站建设基础教程
- 【Tomcat源码解析】第一章:如何搭建源码阅读环境
- LD_PRELOAD 后门 | Linux 后门系列
- 如何利用k8s拉取私有仓库镜像
- rsyslog queue队列权威指南
- 用LOL获得BUFF场景来看待Guava之事件总线
- 文件&目录小技巧 | Linux后门系列
- 从0到1开发测试平台(十)后端增加登录token返回
- rsyslog磁盘辅助(Disk-Assisted)模式踩坑记
- Guava字符串的处理
- Phishing
- Guava Cache用法介绍(极简版)
- Linux Netcat 命令——网络工具中的瑞士军刀
- __all__ 是干嘛用的?