题解 P1999 【高维正方体】
数学上来先打表。
打表发现:
| 点 | 线 | 面 | 体 | |
|---|---|---|---|---|
| 点 | ||||
| 线 | ||||
| 面 | ||||
| 体 |
发现规律了吗?如果设在
这个可以感性理解一下:要构造一个
此时原先
另一方面,原先
所以呢?
重新看一遍上面这个式子,发现
于是我们利用二项式定理算一下,
费马小定理求逆元。
然后就没有然后了。
代码里面有三个坑哦,请注意查看!
#include <bits/stdc++.h>
#define ll long long
#define mod 100000007
using namespace std;
int n, m;
ll ans;
ll qp(int a, int b) {
if (b == 0) return 1;
ll k = qp(a, b<<1);
k = k * k % mod;
if (b & 1) return k * a % mod;
else return k;
}
int main() {
cin >> n >> m;
ans = qp(2, n);
for (register int i = 1; i <= m; i++) {
ans = ans * 500000004 % mod * (n + i + 1) % mod * qp(i, mod - 2) % mod;
}
cout << ans << endl;
return 0;
}
码风奇丑,请见谅。