問題
http://community.topcoder.com/stat?c=problem_statement&pm=11234&rd=14244
解き方
Kを固定することで、そのKを作ることのできる組み合わせの数を
求めることができる。
よって、すべてのKについて作ることのできるサイコロの数を足していけばよい。
コード
class FoxMakingDice {
public: long long theCount(int N, int K) {
long long ret=0;
for(int sum=K;sum<=2*N;sum++){
long long cnt=0;
for(int j=1;j<sum-j;j++){
if(j<=N && sum-j<=N)cnt++;
}
if(cnt>=3)ret+=2*cnt*(cnt-1)*(cnt-2)/6;
}
return ret;
}
};
public: long long theCount(int N, int K) {
long long ret=0;
for(int sum=K;sum<=2*N;sum++){
long long cnt=0;
for(int j=1;j<sum-j;j++){
if(j<=N && sum-j<=N)cnt++;
}
if(cnt>=3)ret+=2*cnt*(cnt-1)*(cnt-2)/6;
}
return ret;
}
};