我试图解决这个问题,但自动判断返回“超出时间限制”(TLE) .
在情人节之际,亚当和夏娃继续参加比赛 . 他们全面清理并进入决赛 . 在最后一轮中,给予偶数N和整数K,并且他必须找到小于N的最大奇数M,使得M的二进制表示中的数字之和最多为K.
输入格式:
对于每个测试用例,您将获得偶数N和整数K.
输出格式:
对于每个测试用例,输出整数M(如果存在),否则输出-1
约束:
1≤T≤104
2≤N≤109
0≤K≤30
样本输入:
2
10 2
6 1
样本输出:
9
1
这是我到目前为止所做的 .
static long play(long n, int k){
if(k==0) return -1;
if(k==1) return 1;
long m=n-1;
while(m>0){
long value=Long.bitCount(m); //built in function to count bits
if(value<=k ){
return m;
}
m=m-2;
}
return -1;
}
public void solve(InputReader in, OutputWriter out) {
long start=System.currentTimeMillis();
int t=in.readInt();
while(t-->0){
long n=in.readLong();
int k=in.readInt();
long result=play(n,k);
out.printLine(result);
}
long end=System.currentTimeMillis();
out.printLine((end-start)/1000d+"ms");
}
}