在尝试问题“核反应堆”时,我在计算机上获取结果,但是在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表示,这是他们希望您获得的答案。如果您想了解更多信息,请随时询问!

10-06 07:01