给出M * N两个球员p1和p2网格的网格和位置.有n个球放在网格上的不同位置.让这些球的位置B(1), B(2), B(3) ..., B(n).
我们需要计算选择所有球所需的最小曼哈顿距离.球应该在如果即升序采摘B(i)的前采摘B(j)如果i < j.
考虑下面的示例情形:
p1 = (1, 1)
p2 = (3, 4)
让我们考虑球的位置作为
B(1) = (1, 1), B(2) = (2, 1), B(3) = (3, 1), B(4) = (5, 5)
输出将5因为p1会先选择B(1), B(2), B(3)和p1将选择B(4)
我的方法
,我做了贪婪的 方法和计算距离p1,并p2从给定的球B(i)(从开始i = 1 to …
以下代码帮助我们找到给定数字中一位的位置:
int n = in.nextInt();
for (int d = 30; d >= 0; d--){
if (n << ~d < 0){
System.out.print(d + " ");
}
}
Run Code Online (Sandbox Code Playgroud)
例如:如果n = 5,则其二进制表示为101,并且1s位于第0和第2位置,因此输出将为2 0.
更多例子:
n Output
8 3
149 7 4 2 0
Run Code Online (Sandbox Code Playgroud)
我无法理解此代码的含义:
n << ~d < 0.
Run Code Online (Sandbox Code Playgroud)
我知道右移和恭维的概念,但想知道当n位置设置有位时,这个特定表达式如何评估为负数d.
在Java中,我使用标准Scanner和BufferedReader类进行输入,例如:
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
Run Code Online (Sandbox Code Playgroud)
或者
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int a=Integer.parseInt(br.readLine());
Run Code Online (Sandbox Code Playgroud)
但是像这样获取输入需要大量的运行时间。我想知道更快的获取输入的方法。提前致谢
编辑:我见过像 uwi 这样的顶级 java 程序员,他们以非常不同的方式接受输入。他们有点创建自己的读者类别。我不明白他们的程序如何在运行时变得更快。
考虑一个70最接近的数字是64ie 的例子2^6.所以最小绝对差异是6.
什么是解决此类问题的好方法(lg n时间复杂度)?
编辑:b和x是integers
编辑:1 < n < 10^9这里n是它的最小绝对差已经被发现的数量.假设q查询即将到来1 < q < 10^5