在尝试问题“核反应堆”时,我在计算机上获取结果,但是在CodeChef中,时间限制为0.2秒,在提交答案时,我遇到了TLE(超过时间限制)错误,并且一次出现测试我得到错误的答案。
我不知道是什么原因造成的。
任何提示都会有所帮助。
链接:https://www.codechef.com/problems/NUKES
我的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) {
FastReader fr = new FastReader();
// I/P
int a = fr.nextInt();
int n = fr.nextInt();
int k = fr.nextInt();
// ARRAY TO STORE RESULT
int react[] = new int[k];
// ARRAY OF ZERO AND ONES
int temp_one[]=new int[k];
int temp_zero[]=new int[k];
for (int i = 0; i < k; i++){
react[i] = 0;
temp_zero[i]=react[i];
temp_one[i]=1;
}
while (a != 0) { // TO REPEAT TILL ALL (A) ARE USED
int j = 0;
while(react[j]>=n){ // CHECK(value in K>=A)
react[j] = 0;
j++;
}
react[j]++;
if(Arrays.equals(react,temp_one)){ // CHECK(all K are filled)
react=temp_zero;
}
a--;
}
for(int i=0;i<k;i++){
System.out.print(react[i]+" ");
}
}
//////////////////// FAST IO //////////////////////
static class FastReader{
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
}
catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
Results given by CodeChef
最佳答案
此代码应适用于您的算法。
int[] ret = new int[k];
for(int i = (int)(Math.log(a)/Math.log(n+1)); i >= 0; i--) {
int val = (int)(a/Math.pow(n+1,i));
a -= val*Math.pow(n+1,i);
if (i < k) ret[i] = val;
}
ret
是您的返回数组。基本上,它找到a的基n + 1表示,这是他们希望您获得的答案。如果您想了解更多信息,请随时询问!