小さいケースを試すと、(n+k)C(k+1)に見える
上手く計算する知恵が咄嗟に浮かばなかった、とりあえず多倍長整数(自前)を利用。
使わない解も後でやっておこう。
class SuperSum {
public:
int calculate(int k, int n)
{
char buff[100];
BigInt a("1"), b("1");
for (int i = 0; i < k + 1; ++i) {
sprintf(buff, "%d", n + k - i);
a = a * BigInt(buff);
sprintf(buff, "%d", i + 1);
b = b * BigInt(buff);
}
BigInt c = a / b;
BigInt d("1000000007");
c = c % d;
lli m;
sscanf(c.toString().c_str(), "%lld", &m);
return m;
}
};
0 件のコメント :
コメントを投稿