- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Given N and M, write an equation using left shift operators whose result will be equal to the product N * M.
Input : First line has 0 < T ≤ 50000 denoting number of test cases.
Next T lines have two integers 0 < N, M ≤ 10¹⁶.Output : For each test case print an equation for N * M resembling
(N << p1) + (N << p2)+ ...+(N << pk) where p1 ≥ p2 ≥ ... ≥ pk and k is minimum.
SAMPLE INPUT SAMPLE OUTPUT
2
2 1 (2<<0)
2 3 (2<<1) + (2<<0)Time Limit: 1.0 sec
我的解决方案第一种方法
int dig = (int)(Math.floor(Math.log10(m)/Math.log10(2))+1);
boolean flag = false;
for(long i = dig; i>=0; --i) {
if(((m>>(i-1l)) & 1l) == 1l) {
if(flag)
System.out.print(" + ("+n+ "<<"+(i-1)+")");
else {
System.out.print("("+n+"<<"+(i-1)+")");
flag = true;
}
}
}
第二种方法
boolean[] arr = new boolean[dig];
int i = dig-1;
while(m > 0) {
if((m&1) == 1 ) {
arr[i] = true;
}
i--;
m = m>>1l;
}
int j = dig-1;
for( i = 0; i < dig; ++i) {
if(arr[i]) {
if(flag)
System.out.print(" + ("+n+"<<"+j+")");
else {
System.out.print("("+n+"<<"+j+")");
flag = true;
}
}
j--;
}
在这两种情况下,我在 8 题中得到了 5 题,其余 3 题都是 TLE,为什么?
最佳答案
实际上,我并没有看到您的两种方法中存在任何阻止最多 57 位数字的数万个乘积在一秒钟内表示为 String
的情况:TLE
可能是由于 System.out.print()
花费了过多的时间。
也就是说,使用像这样的实用程序
/** builds <code>n * m</code> in the form
* <code>(n<<p1) + (n<<p2) + ... + (n<<pk)</code>
* using left shift.
* @param n (0 < multiplicand <= 10**16)
* @param m 0 < multiplier <= 10**16
* @return a verbose <code>String</code> for <code>n * m</code>
*/
static String verboseBinaryProduct(Object n, long m) {
int shift = Long.SIZE - Long.numberOfLeadingZeros(m) - 1;
final long highest = 1 << shift;
final StringBuilder binary = new StringBuilder(42);
final String chatter = ") + (" + n + "<<";
final long rest = highest - 1;
while (true) {
if (0 != (highest & m))
binary.append(chatter).append(shift);
if (0 == (rest & m)) {
binary.append(')');
return binary.substring(4);
}
m <<= 1;
shift -= 1;
}
}
和System.out.println(verboseBinaryProduct(n, m));
。
关于java - 使用按位移位运算符进行相乘,得到 TLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46270676/
有一个未排序的列表 a 和一个范围列表,如 ranges = [(10, 20), (30, 50), (15, 35) ...]。 a 中的最大值为 uint64_t。目标是计算每个范围的元素数量。
在没有Maps帮助的情况下通过Memoization解决问题,由于读取文件的方法,我得到了TLE,根据我的说法,这不应该是这种情况。可能的原因是什么? 这是给出 AC - http://ideone.
我正在用 C 语言编写一个宾果游戏程序,该程序出现“时间限制”当在线评委给我巨大的宾果游戏板(例如 256*256 板 1 人或 150*150 板 6 人)时,我超出了”。我如何优化我的代码以避免
我真的很困惑,为什么我的 Java 代码无法正常工作,它在 Hacker Earth 上的 Code Monks 上提供了 TLE。这是 1 的链接 Link to Question第一个问题 MON
我正在尝试来自 Interviewbit 的以下问题: Given a m x n grid filled with non-negative numbers, find a path from to
Question Given N and M, write an equation using left shift operators whose result will be equal to t
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试使用ephem TLE 数据跟踪月球的位置,然后将其存储在data.csv 文件中。但是,我找不到它! 下面的代码是我正在尝试做的事情的示例,这是针对国际空间站的,它是我找不到的月球的“第
当我在 hackerearth 提交此代码时,我得到了 TLE。 任何建议我如何优化这个代码。 #include #include int checkPrime(int); int main()
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试解决这个问题:http://olimpiada-informatica.org/?cmd=downloadE&pbm=velo101&ext=pdf它是西类牙语,但我会尝试在这里翻译它: Y
我有顺时针旋转 2D 矩阵的工作代码,但当 k 达到大数时,我遇到了 TLE(超出时间限制)问题。我不知道如何简化我的代码,我猜是 for 循环导致了问题,但我看不出没有它们就可以使我的代码工作的方法
我正在解决 this problem通过使用线段树。我在每个节点保存总和、最大值、最左边的最大值和最右边的最大值。然后我搜索图表以找到特定时间间隔的答案。我怎样才能提高这段代码的速度? import
当我将我的解决方案提交给 codechef 时,我不断收到时间限制错误。我从扫描仪切换到缓冲阅读器,但这并没有解决它。我认为它在我的算法中,但我不确定在哪里,除了检查每 5 个减量之外可能是不必要的。
我正在重新尝试这个 problem statement , now that the contest is all over (所以这不是作弊或任何东西,只是想学习,因为答案没有公布,只有给定测试用例
问题的链接是 - spoj question 我尝试通过这种方法解决问题 - N 范围内的对数 = N-1 范围内的对数 + 一些新对。 但我不知道这里还应该做哪些优化来避免 TLE。我还阅读了有关
问题:Ekka 和他的 friend Dokka 决定买一个蛋糕。他们都喜欢蛋糕,这就是为什么他们买了蛋糕后想分享蛋糕。顾名思义,Ekka 非常喜欢奇数,Dokka 非常喜欢偶数,他们想分蛋糕,让 E
我正在尝试解决 UVA 在线判断上的 12503 问题。我想我已经找到了解决方案,但它给了我 TLE。这是问题所在: 你有一个机器人站在 x 轴的原点上。机器人将得到一些指令。你的任务是在执行完所有指
标准的两行元素 (TLE) 格式包含 2 位数年份加小数天的时间,因此 16012.375 将是 2016 年 1 月 12 日 09:00。使用 python 的 time 或 datatime 模
这是我要解决的问题,我正在使用 The Fact That Prefix Sum[i] - Prefix Sum[i-1] Leads to Frequency being greater than
我是一名优秀的程序员,十分优秀!