P8695 [蓝桥杯 2019 国 AC] 轨道炮
题目描述
小明在玩一款战争游戏。地图上一共有 NNN 个敌方单位,可以看作 2D 平面上的点。其中第 iii 个单位在 000 时刻的位置是 (Xi,Yi)(X_i, Y_i)(Xi,Yi),方向是 DiD_iDi (上下左右之一, 用 U/D/L/R 表示),速度是 ViV_iVi。小明的武器是轨道炮,只能使用一次,不过杀伤力巨大。小明可以选择在某个非负整数时刻释放轨道炮,轨道炮一次可以消灭在一条直线 (平行于坐标轴) 上的所有敌方单位。请你计算小明最多能消灭多少敌方单位。
输入格式
输入第一行包含一个整数 NNN。
以下 NNN 行每行包含 333 个整数 XiX_iXi, YiY_iYi, ViV_iVi,以及一个大写字符 DiD_iDi。
输出格式
输出一个整数代表答案。
输入输出样例 #1
输入 #1
4
0 0 1 R
0 10 1 R
10 10 2 D
2 3 2 L
输出 #1
3
说明/提示
对于所有评测用例,1≤N≤10001 \le N \le 10001≤N≤1000,−106≤Xi,Yi≤106-10^6 \le X_i, Y_i \le 10^6−106≤Xi,Yi≤106,0≤Vi≤1060 \le V_i \le 10^60≤Vi≤106。
蓝桥杯 2019 年国赛 A 组 H 题(C 组 J 题)
C++实现
#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y,v;
char f;
}a[10001];
map<int,int>t1,t2;//用map离散
int ans;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y>>a[i].v>>a[i].f;
t1[a[i].x]++;
t2[a[i].y]++;
}
for(auto j:t1) ans=max(j.second,ans);
for(auto j:t2) ans=max(j.second,ans);
//注意第一次也有可能是最优打击时间
for(int i=1;i<=500;i++){
t1.clear();
t2.clear();
for(int j=1;j<=n;j++){ //判断第i时间点各个坐标
if (a[j].f == 'U') a[j].y += a[j].v;
if (a[j].f == 'D') a[j].y -= a[j].v;
if (a[j].f == 'L') a[j].x -= a[j].v;
if (a[j].f == 'R') a[j].x += a[j].v;
t1[a[j].x]++;
t2[a[j].y]++;
}
for(auto j:t1) ans=max(j.second,ans);
for(auto j:t2) ans=max(j.second,ans);
}
cout<<ans;
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

被折叠的 条评论
为什么被折叠?



