在SPOJ上为PARTSUM获取Java中的NZEC

在SPOJ上为PARTSUM获取Java中的NZEC,java,runtime-error,Java,Runtime Error,数组T[]已用于存储所有可能的连续组合的总和。在每个步骤中,我检查它是否至少是k,并且该值存储在变量val中。下面是Java代码: import java.util.Arrays; import java.util.Scanner; class Codechef { public static void main(String[] args) throws java.lang.Exception { Scanner sc = new Scanner(System.in)

数组
T[]
已用于存储所有可能的连续组合的总和。在每个步骤中,我检查它是否至少是
k
,并且该值存储在变量
val
中。下面是Java代码:

import java.util.Arrays;
import java.util.Scanner;

class Codechef {
    public static void main(String[] args) throws java.lang.Exception {
        Scanner sc = new Scanner(System.in);
        long t = sc.nextLong();
        while (t > 0) {
            int n = sc.nextInt();
            long k = sc.nextLong();
            long p = sc.nextLong();
            long a[] = new long[n];
            long T[] = new long[((n * (n + 1)) / 2)];
            Arrays.fill(T, -1);
            long sum = 0, x = 0, val = p, f = 0;
            int i = 0;
            for (i = 0; i < n; i++) {
                a[i] = sc.nextLong();
                sum = sum + a[i];
                x = sum % p;
                T[i] = x;
                if (T[i] == k)
                    f = 1;
                else if (T[i] > k && T[i] < val)
                    val = T[i];
            }
            if (f != 1) {
                for (int j = i - 1; j > 0; j--) {
                    for (int m = 0; m < j; m++) {
                        x = T[j] - T[m];
                        if (x < 0)
                            x += p;
                        T[i] = x;
                        if (T[i] == k) {
                            f = 1;
                            break;
                        }
                        else if (T[i] > k && T[i] < val)
                            val = T[i];
                        i++;
                    }
                    if (f == 1)
                        break;
                }
            }
            if (f == 1)
                System.out.println(k);
            else
                System.out.println(val);
            t--;
        }
    }
}
导入java.util.array;
导入java.util.Scanner;
类Codechef{
公共静态void main(字符串[]args)引发java.lang.Exception{
扫描仪sc=新的扫描仪(System.in);
长t=sc.nextLong();
而(t>0){
int n=sc.nextInt();
长k=sc.nextLong();
长p=sc.nextLong();
长a[]=新长[n];
长T[]=新长[(n*(n+1))/2];
填充(T,-1);
长和=0,x=0,val=p,f=0;
int i=0;
对于(i=0;ik&&T[i]0;j--){
对于(int m=0;mk&&T[i]
以上是关于SPOJ的代码。可能的错误是什么


以前我在提交时遇到运行时错误NZEC。现在已经纠正了,现在我得到了TLE。有任何优化吗?

试着在自己的计算机上运行它,看看会收到什么错误消息。如果没有合适的stacktrace,我们就无能为力了。在嵌套for循环中:
t[i]=x
i
的最后一个值是
n
。因此,这将抛出IndexOutofBoundsCeptioni,您已经尝试了许多测试用例,它运行正常。也许我能用Java找到正确的@PaulNo@RafiduzzamanSonnet,因为
T[]
的长度不是
n
请尝试在您自己的计算机上运行它,看看会收到什么错误消息。如果没有合适的stacktrace,我们就无能为力了。在嵌套for循环中:
t[i]=x
i
的最后一个值是
n
。因此,这将抛出IndexOutofBoundsCeptioni,您已经尝试了许多测试用例,它运行正常。也许我能用Java找到正确的@PaulNo@RafiduzzamanSonnet,因为
T[]
的长度不是
n