Hello, I am getting WA on test case 4. I followed the editorial quite closely, so I think the issue might lie in not properly taking the modulus. Here is my WA code: Please tell me the error in the code.
import java.util.Arrays; import java.util.HashMap; import java.util.Scanner;
public class DuffInBeach { public static void main(String[] args) {
Scanner s = new Scanner(System.in); String str = s.nextLine(); String[] strarr = str.split(" "); int N = Integer.parseInt(strarr[0]); double L = Double.parseDouble(strarr[1]); int K = Integer.parseInt(strarr[2]); long[][] dp = new long[N][K+1]; long[] a = new long[N]; str = s.nextLine(); strarr = str.split(" "); HashMap hmap = new HashMap(); long[] b = new long[N]; //Index of sortings, a[p[i]]<= a[p[i+1]]; for(int i = 0; i < N; i++){ a[i] = Long.parseLong(strarr[i]); b[i] = a[i]; hmap.put(a[i], i); } Arrays.sort(b); int[] p = new int[N]; for(int i = 0; i < N; i++) p[i] = (int) hmap.get(b[i]); //# of permutations from Block 1 to Block J, for each pos I. for(int i = 0; i < dp.length; i++) dp[i][1] = 1; for(int j = 2; j <= K; j++){ for(int i = 0; i < N; i++){ int ptr = 0; while(ptr < N && a[p[ptr]]<= a[i]) dp[i][j] = (int) ((dp[i][j]+dp[p[ptr++]][j-1])%(1e9+7)); } } Integer denom = new Integer(N); long c = (long) Math.ceil(L/denom.doubleValue()); long min = Math.min(c, K); int x = (int) ((L-1)%(N)); long ans = 0; for(int i = 0; i <= x; i++){ for(int j = 1; j <= min; j++){ long sum = (long) ((dp[i][j]*(c-j+1))%(1e9+7)); ans = (long) ((ans+sum)%(1e9+7)); } } for(int i = x+1; i < N; i++){ for(int j = 1; j <= Math.min(c-1,K); j++){ long sum = (long)((dp[i][j]*(c-j)%(1e9+7))); ans = (long)((ans+sum)%(1e9+7)); } } System.out.println(ans);
} }