私はこの質問のために書いたコードはほんの少数のテストケースを通過します。私はこれを最適化するのに助けが必要です。テストケースがほとんど通過しませんでした。なぜ全部ではない?
質問:
マーモット、非常に奇妙な生き物がボールを食べます。毎晩、彼は赤と白のボールを食べる。したがって、夕食は、いくつかのボールのシーケンスとして表現することができ、そのうちのいくつかは白で、いくつかは赤で表示されます。しかし、夕食をおいしくするには、制約があります.Marmotは、サイズKのグループでのみ白いボールを食べたいと考えています。今では、「AとBのボールの間でマーモットが何通り食べることができるか」を見つける必要があります。答えは1000000007を法とする非常に大きな印刷が可能です。
入力
最初の行は、二つの整数、t及びtはテストケースの数を表し、K(1 < = T、K < = 105)を含みます。次のt行は、テストケースを記述する2つの整数AおよびB(1 < = A < = B < = 105)を含む。
出力
t行を出力すると、すべてのテストケースに対して1行で答えることができます。
サンプルテストケース
入力
1~3
出力
説明 R - W>レッドボール - >長さ1及びK = 2マーモットが食べることができる®長さ2及びK = 2の場合マーモットが食べることができる白色ボール( RR)および(WW)長さ3およびK = 2の場合、マーモットは(RRR)、(RWW)および(WWR)を食べることができる。
import java.util.Scanner;
public class Source {
//Did not use recursive call, as I thought that would increase the running time
public static int factorial(int n) {
int i,f = 1;
for(i=1;i<=n;i++) {
f *= i;
}
return f;
}
public static int arrange(int m, int n, int k){
// m is total length of balls
// n is no. of packets of white balls
// k is size of each packet
int r,p,arrange;
r = m-(n*k); // r - no. of red balls
p = n+r; // p - no. of items to be shuffled
arrange = factorial(p)/factorial(r)/factorial(n);
return arrange;
}
public static void main(String args[]){
int i,j,l,t=0,k=0,A=-1,B=-1,q,ansforj,answer,arrans;
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt())
t = sc.nextInt();
if (sc.hasNextInt())
k = sc.nextInt();
for(i=0;i<t;i++){
answer=0;
if (sc.hasNextInt())
A = sc.nextInt();
if (sc.hasNextInt())
B = sc.nextInt();
for(j=A;j<=B;j++){
q = j/k;
ansforj=0;
for(l=0;l<=q;l++){
arrans = arrange(j,l,k);
ansforj = ansforj + arrans;
}
answer = answer + ansforj;
answer = answer % 1000000007;
}
System.out.println(answer);
}
sc.close();
}
}
ようこそ!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –
また、 'mはボールの総長さです'というコメントがあるときは、変数の名前を間違えています。 'totalLengthOfBalls'のように便利な名前をつけるべきです。 –
どのように4 4(正確に4つのボール)の答えは5ですか? (WWWW)(2つの白いボールが2つのグループに連続している)が有効な答えですか? –