打卡信奥刷题(1760)用C++实现信奥 P8695 [蓝桥杯 2019 国 AC] 轨道炮

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 10001N1000−106≤Xi,Yi≤106-10^6 \le X_i, Y_i \le 10^6106Xi,Yi1060≤Vi≤1060 \le V_i \le 10^60Vi106

蓝桥杯 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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值