注:题目和参考来自于赛码网。赛码网
终结者C
题目描述
收到情报,有批新造的机器人要运输到前线。小C将去破坏机器人的运输。小C将激光炮放置在公路的一旁,等运输车经过的时候发射(假设激光炮一定可以射穿车辆)。由于能源有限,激光炮只能发射两次。可以认为激光炮放在坐标轴的原点处,并向y轴正方向发射。每辆运输车可以看作是一个矩形,起始的x轴坐标为Xi ,所有的车均位于第一象限,长度为Li,速度为1,朝x轴负方向运动。即经过t时间后,该车车头的x坐标为Xi-t,车尾坐标为Xi-t+Li 。只要打中车的任何一个部分就算击中。
请你算算,他在哪两个时刻发射,才能摧毁最多的运输车。
输入
第一行一个正整数 n ( 2≤N≤200 ),表示运输个的数量。
接下来n行,每行两个整数X和L(1≤X、L≤109),表示一辆车的x轴坐标和长度。- 输出
输出最多可以摧毁的运输车数量。 - 样例输入
4
2 2
3 1
5 2
7 3 - 样例输出
4 - 时间限制
C/C++语言:1000MS其它语言:3000MS - 内存限制
C/C++语言:65536KB其它语言:589824KB
我的想法
首先,由于运输车的速度相同,所以他们的相对位置不变,要求在哪两个时刻发射,能摧毁最多的运输车,也就是哪两个时刻通过y轴的车的数量最多。但我们可以假定车不动,而是Y轴向右移动。
它这儿由于X、L较小,所以我觉得可以直接枚举所有的 两个时刻的组合,去求这些情况下,可以击中的运输车数。
代码如下:
//只枚举所有的位置作为激光炮的发射时刻
#include<iostream>
using namespace std;
#define maxn 201
#define maxDistance 109
int main()
{
int n,length;
int a[maxn],b[maxn]; //a[],b[]分别对应车头、车尾的位置