AC
2024-07-17 16:55:34
发布于:北京
31阅读
0回复
0点赞
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6 + 5, MX = 1e8 + 7; int n, m, f[N], orz = 1, mx = 1, A[N];
int qpow(int a, int b) {
	int res = 1; while (b) b & 1 ? res = 1ll * res * a % MX : 0,
		a = 1ll * a * a % MX, b >>= 1; return res;
}
int main() {
	int i; cin >> n >> m; for (i = 1; i <= n; i++) orz = orz * 2 % MX;
	orz = (orz - 1 + MX) % MX; A[0] = 1; for (i = 1; i <= m; i++)
		A[i] = 1ll * A[i - 1] * ((orz - i + 1 + MX) % MX) % MX,
	mx = 1ll * mx * i % MX; f[f[1] = 0] = 1; for (i = 2; i <= m; i++)
		f[i] = (A[i - 1] - f[i - 1] + MX - 1ll * f[i - 2] *
		(i - 1) % MX * (orz - i + 2 + MX) % MX + MX) % MX;
	cout << 1ll * f[m] * qpow(mx, MX - 2) % MX << endl; 
    return 0;
}
全部评论 2
AC
#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 1e6 + 5, MX = 1e8 + 7; int n, m, f[N], orz = 1, mx = 1, A[N]; int qpow(int a, int b) { int res = 1; while (b) b & 1 ? res = 1ll * res * a % MX : 0, a = 1ll * a * a % MX, b >>= 1; return res; } int main() { int i; cin >> n >> m; for (i = 1; i <= n; i++) orz = orz * 2 % MX; orz = (orz - 1 + MX) % MX; A[0] = 1; for (i = 1; i <= m; i++) A[i] = 1ll * A[i - 1] * ((orz - i + 1 + MX) % MX) % MX, mx = 1ll * mx * i % MX; f[f[1] = 0] = 1; for (i = 2; i <= m; i++) f[i] = (A[i - 1] - f[i - 1] + MX - 1ll * f[i - 2] * (i - 1) % MX * (orz - i + 2 + MX) % MX + MX) % MX; cout << 1ll * f[m] * qpow(mx, MX - 2) % MX << endl; return 0; }2025-10-18 来自 上海
0谢谢
2025-01-26 来自 陕西
0





有帮助,赞一个