[京东2017实习生笔试] 终结者C

原题: http://exercise.acmcoder.com/online/online_judge_ques?ques_id=4401&konwledgeId=41

时间限制 C/C++语言:1000MS其它语言:3000MS

内存限制 C/C++语言:65536KB其它语言:589824KB

题目描述

收到情报,有批新造的机器人要运输到前线。小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

样例输出

4

思路

暴力枚举。所有车相对不对,可以认为是静止的。枚举所有可能的2个狙击位置,位置均选在车头(或车尾)。枚举所有可能的2个车头位置即可覆盖所有的情况,因为用扫描线从左向右扫过所有车辆,穿过车辆的个数的变化位置一定是发生在某车的车头或车尾,车尾导致个数变小,车头导致个数变大。因此枚举所有可能的车头或车尾位置即可。

代码

 1 import java.util.Scanner;
 2
 3 public class Main {
 4
 5     public static boolean hit(int[][] itv, int x, int carIx) {
 6         return itv[carIx][0] <= itv[x][0] && itv[x][0] <= itv[carIx][1];
 7     }
 8
 9     public static int count(int[][] itv, int i, int j) {
10         int cnt = 0;
11         for (int k = 0; k < itv.length; k++) {
12             if (hit(itv, i, k) || hit(itv, j, k)) {
13                 cnt++;
14             }
15         }
16         return cnt;
17     }
18
19     public static int solve(int[][] itv) {
20         final int n = itv.length;
21         int max = 0;
22         for (int i = 0; i < n; i++) {
23             for (int j = i + 1; j < n; j++) {
24                 max = Math.max(max, count(itv, i, j));
25             }
26         }
27         return max;
28     }
29
30     public static void main(String[] args) {
31         Scanner sc = new Scanner(System.in);
32         int n = sc.nextInt();
33         int[][] itv = new int[n][2];
34         for (int i = 0; i < n; i++) {
35             int x = sc.nextInt();
36             int l = sc.nextInt();
37             itv[i][0] = x;
38             itv[i][1] = x + l;
39         }
40
41         System.out.println(solve(itv));
42     }
43 }
时间: 2024-10-15 13:49:47

[京东2017实习生笔试] 终结者C的相关文章

[京东2017实习生笔试] 通过考试

时间限制C/C++语言:1000MS其它语言:3000MS 内存限制C/C++语言:65536KB其它语言:589824KB 题目描述 小明同学要参加一场考试,考试一共有n道题目,小明必须做对至少60%的题目才能通过考试.考试结束后,小明估算出每题做对的概率,p1,p2,...,pn.你能帮他算出他通过考试的概率吗? 输入 输入第一行一个数n(1<=n<=100),表示题目的个数.第二行n个整数,p1,p2,...,pn.表示小明有pi%的概率做对第i题.(0<=pi<=100)

Legendary Items-微软2017实习生笔试第一题

题目如下: 这道题难点不仅在于正确理解题意,判断递归条件,更在于用数学方法推出解决公式.因为N最大为1百万,而内存只有256MB, 所以暴力递归肯定会超时,超空间. 不过,我才疏学浅,又没有大量时间去深究,所以只写出了暴力递归算法.进一步优化的话,可以考虑P在迭代很久后会变为0这一事实,也许可以进一步节省时空消耗. 下面给出算法,由于我注释写的很详细,这里就不进一步解释了. 1 import java.util.Scanner; 2 public class Main { 3 4 static

DP - tencent2016实习生笔试A

tencent2016实习生笔试A Problem's Link ---------------------------------------------------------------------------- Mean: 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数. analyse: 对于这题来说,插入字符和删除字符使其成为回文串,答案是一样的. 首先求s的反串rs,然后对s和rs求最长公共子序列,要删除的字

软考类----来自淘米2004实习生笔试

淘米2014实习生笔试,今年是淘米第一年招暑期实习生,笔试好大部分考的是软考的题目啊啊啊啊(劳资后悔当年没考软考刷加权),其他是浅而泛的风格,C++,SQL语句,数据结构(哈夫曼树,二叉查找树,栈后缀表达式,连通无向图),排序算法各种最优最差平均 复杂度-- 下面记一下考到的软考风格的题目,不过估计其他家也不会考(劳资什么时候能过个笔试额,锁定C++不搞JS了) 1.计算机中最适合进行数字加减运算的编码是_补码__,最适合表示浮点数的数字编码是_移码__. A.原码 B.反码 C.补码 D.移码

2014腾讯实习生笔试——蒙特卡洛算法求圆周率

这是2014腾讯实习生笔试(西安,武汉站)的第26题.给出二个函数,让你去理解其含义.答案是:第一个函数式用来产生(a,b)之间的随机小数.第二个函数式用蒙特卡洛概率算法求近似圆周率. 先介绍一下该方法(蒙特卡洛算法): 以 概率和统计理论方法为基础的一种计算方法.将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解.比方,给定 x=a ,和 x=b ,你要求某一曲线 f 和这两竖线,及 x 轴围成的面积,你能够起定 y 轴一横线 y=c 当中 c>=f(a) a

华为2017实习生上机笔试_当出差遇上大雾_Java编程

出差问题: 1.共有6个城市,某员工现从5号城市,到endCity出差: 2.如果一个城市遇上大雾,则该城市(既不能到达,也不能离开): 3.给定距离矩阵useHours[][6] = { 0,2,10,5,3,INF, INF,0,12,INF,INF,10, INF,INF,0,INF,7,INF, 2,INF,INF,0,2,INF, 4,INF,INF,1,0,INF, 3,INF,1,INF,2,0,}; 其中单位为小时,INF为1000小时 4.输入:目的地和大雾城市: 5.输出最短

京东Java实习生面经

先自我介绍下,国内渣本科211学校,坐标京津冀,面的北京京东JAVA研发,实习通知已经拿到.大学感觉过的挺颓废的,每天课去上,去听,回宿舍做完专业作业就开始打游戏,看视频.偶尔跟着同学做过几个项目,大三的时候好不容易拿了校的二等奖奖学金.但是平时自己对互联网这方面特别感兴趣,经常去cnbeta还有爱范儿虎嗅这类的网站逛逛,看看知乎上面的分析.所以自己觉得自己对于互联网方面还是挺有感觉的,和同学们讨论相关的新闻也说的自我感觉头头是道.大三准备开始寻找实习,虽然说北京互联网公司众多,自己在BAT和几

京东2017金融预测

赛题回顾 京东金融提供8到11月的用户借款信息,订单购买信息,页面点击信息以及用户个人和贷款的初始额度信息:要求预测12月每个用户的贷款信息.评价方式采用RMSE函数: 参考 2017京东金融信贷需求预测 赛题总结 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/9748224.html

京东拍拍网 笔试 搞java的去考C++ 苦逼

1.用C实现数字逆转,用递归实现,很简单. package 京东; public class Main { private static int a=0; public static void fun(int m) { if(m!=0) { a=10*a+m%10; fun(m/10); } } public static void main(String[] args) { // TODO Auto-generated method stub fun(-7); System.out.print