查看原帖
1036417
yongqian123楼主2025/7/27 11:50

为什么最后四个点 WA 了?

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define io ios::sync_with_stdio(0), cin.tie(), cout.tie()
const ll _n = 1e6 + 1, _mod = 1e9 + 7;
ll t, n, m, lg2[_n], fc[_n] = {1};
ll qpow(ll x, ll y){
	if (!y) return 1;
	if (y == 1) return x;
	ll z = qpow(x, y >> 1);
	if (y & 1) return z * z % _mod * x % _mod;
	return z * z % _mod;
}
void init(){
	ll k = 0;
	for (ll i = 1; i < _n; i++) lg2[i] = ceil(log2(i));
	for (ll i = 1; i < _n; i++) fc[i] = fc[i - 1] * i % _mod;
}
signed main(){
	init();
	cin >> t;
	while (t--) cin >> n, m = lg2[n], cout << qpow(fc[m] * fc[(1 << m) - n] % _mod, _mod - 2) * fc[1 << m] % _mod << '\n';
	return 0;
}

2025/7/27 11:50
加载中...