刚才比赛 T2
  • 板块灌水区
  • 楼主TernaryTree
  • 当前回复25
  • 已保存回复25
  • 发布时间2022/7/9 18:01
  • 上次更新2023/10/27 21:20:15
查看原帖
刚才比赛 T2
362750
TernaryTree楼主2022/7/9 18:01
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int maxn = 5e6;

int t, n, k;

const int p = 1e9 + 7;

int a[maxn + 1];
int b[maxn + 1];

int power(int base, int freq, int mod) {
    int ans = 1, tmp = base;
    while (freq) {
        if (freq & 1) ans = ans * tmp % mod;
        freq >>= 1;
        tmp = tmp * tmp % mod;
    }
    return ans;
}

int C(int n, int m) {
    return a[n] * power(a[n - m] * a[m] % p, p - 2, p) % p;
}

signed main() {
	a[0] = a[1] = 1;
	for (int i = 2; i <= maxn; ++i) {
		a[i] = a[i - 1] * i % p;
	}
	b[0] = 1;
	for (int i = 1; i <= maxn; ++i) {
		b[i] = (b[i - 1] << 1) % p;
	}
	cin >> t;
	while (t--) {
		cin >> n >> k;
		if (n == 1) {
			cout << k << endl;
			continue;
		}
		int tot = 0;
		if (k & 1) {
			for (int i = 1; i <= k >> 1; ++i) {
				tot += (C(k / 2, i) % p * b[i] % p * (C(n - 1, i - 1) % p + C(n - 2, i - 1) % p) % p) % p;
				tot %= p;
			}
		} else {
			for (int i = 1; i <= k >> 1; ++i) {
				tot += (C(k >> 1, i) % p * b[i] % p * C(n - 1, i - 1) % p) % p;
				tot %= p;
			}
		}
		
		cout << tot << endl;
	}
	return 0;
}

时间复杂度是 O(nlogn)O(\sum n\log n) 的,理论上不会 TLE,但是只有 20 分。

2022/7/9 18:01
加载中...