解いた問題

2/01/2012

SRM467 Div1 Medium

500
小さいケースを試すと、(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 件のコメント :

コメントを投稿