蓝桥杯VIP算法训练-轨道炮-看完秒懂的(c++map)

简介: 小明在玩一款战争游戏。地图上一共有 N 个敌方单位,可以看作 2D 平面上的点。其中第 i 个单位在 0 时刻的位置是 (Xi, Yi),方向是 Di (上下左右之一, 用’U’/’D’/’L’/’R’ 表示),速度是 Vi。小明的武器是轨道炮,只能使用一次,不过杀伤力巨大。小明可以选择在某个非负整数时刻释放轨道炮,轨道炮一次可以消灭在一条直线 (平行于坐标轴) 上的所有敌方单位。请你计算小明最多能消灭多少敌方单位。

题目描述


小明在玩一款战争游戏。地图上一共有 N 个敌方单位,可以看作 2D 平面上的点。其中第 i 个单位在 0 时刻的位置是 (Xi, Yi),方向是 Di (上下左右之一, 用’U’/’D’/’L’/’R’ 表示),速度是 Vi。小明的武器是轨道炮,只能使用一次,不过杀伤力巨大。小明可以选择在某个非负整数时刻释放轨道炮,轨道炮一次可以消灭在一条直线 (平行于坐标轴) 上的所有敌方单位。请你计算小明最多能消灭多少敌方单位。


输入


输入第一行包含一个整数 N。


以下 N 行每行包含 3 个整数 Xi, Yi, Vi,以及一个大写字符 Di。


输出


输出一个整数代表答案。


样例输入复制


4

0 0 1 R

0 10 1 R

10 10 2 D

2 3 2 L

样例输出复制


3

提示


对于所有评测用例,1 ≤ N ≤ 1000, 1000000 ≤ Xi, Yi ≤ 1000000,0 ≤ Vi ≤1000000。


看题找算法:

典型map题目


思路:

1.首先横向射和纵向射是分立的问题,可以分别解决然后取最大值。


2.单个方向上问题就是:给定初始位置和速度,求一个时间和位置使得在这个时间和位置上重合的点最多。


3.因为n只有1000,两两求出相遇时间以及位置,取答案最大的时间和位置即可。



注意事项:


注意细节

#include
using namespace std; 
int X[1010],Y[1010],vx[1010],vy[1010];
int mx=0;
int n;
void f(int X[],int vx[])
{
    for(int i=1;i<n;i++)
    {
        unordered_map
        int cnt=1;
        for(int j=i+1;j<=n;j++)
        {
            if(vx[i]==vx[j])
            {
                if(X[i]==X[j])
                    cnt++;
                mx=max(cnt,mx);                
                continue;
            }
            int dx=X[i]-X[j],dv=vx[j]-vx[i];
            int t=dx/dv;
            if(dx%dv||t<0)   continue;
            m[t]++;
            mx=max(mx,m[t]+cnt);
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int v;
        char d;
        cin>>X[i]>>Y[i]>>v>>d;
        if(d=='R')
            vx[i]=v;
        if(d=='L')
            vx[i]=-v;
        if(d=='U')
            vy[i]=v;
        if(d=='D')
            vy[i]=-v;
    }
    f(X,vx);
    f(Y,vy);
    cout<<mx;
    return 0;
}
相关文章
|
8天前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
6天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
2月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
37 3
【C++】map、set基本用法
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
C++构建 GAN 模型:生成器与判别器平衡训练的关键秘籍
生成对抗网络(GAN)是AI领域的明星,尤其在C++中构建时,平衡生成器与判别器的训练尤为关键。本文探讨了GAN的基本架构、训练原理及平衡训练的重要性,提出了包括合理初始化、精心设计损失函数、动态调整学习率、引入正则化技术和监测训练过程在内的五大策略,旨在确保GAN模型在C++环境下的高效、稳定训练,以生成高质量的结果,推动AI技术的发展。
71 10
|
2月前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
28 5
|
2月前
|
存储 C++ 容器
【C++】map的模拟实现
C++中的`map`是STL中的一种关联容器,存储键值对且键唯一。`map`基于红黑树实现,自动按键排序,支持动态调整、复杂数据类型、丰富的成员函数及双向迭代器。插入、查找等操作保证了对数时间复杂度,适用于需要快速查找和有序存储的场景。
25 3
|
3月前
|
机器学习/深度学习 算法 关系型数据库
第十五届蓝桥杯C++B组省赛
第十五届蓝桥杯C++B组省赛
124 14
|
3月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
64 5
|
3月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
820 0
高精度算法(加、减、乘、除,使用c++实现)
|
3月前
|
存储 算法 决策智能
【算法】博弈论(C/C++)
【算法】博弈论(C/C++)