Why CE and it run well local.
查看原帖
Why CE and it run well local.
711624
EtHereal_Algorithm楼主2022/4/9 20:16

rt.

本地编译没有问题,样例都过了。

交了 66 发,全部 CE,没有返回原因。

#include <bits/stdc++.h>

//standard

#define up(i,l,r) for(int i=(l);i<=(r);i++)
#define down(i,r,l) for(int i=(r);i>=(l);i--)
typedef long long ll;
using namespace std;

//quick in / out

inline ll readl(){
    ll f = 1, x = 0;
	char ch;
    do{ch = getchar();if(ch == '-')f = -1;}while(ch < '0' || ch > '9');
    do{x = x * 10 + ch - '0';ch = getchar();}while(ch >= '0' && ch <= '9');
    return f * x;
}
void printl(ll x){
	if(x > 9) printl(x / 10);
	putchar(x % 10 + '0');
}
inline int read(){
    int f = 1, x = 0;
	char ch;
    do{ch = getchar();if(ch == '-')f = -1;}while(ch < '0' || ch > '9');
    do{x = x * 10 + ch - '0';ch = getchar();}while(ch >= '0' && ch <= '9');
    return f * x;
}
void print(int x){
	if(x > 9) print(x / 10);
	putchar(x % 10 + '0');
}

//quick power

const ll mod = 998244353;
ll qp(ll a,ll b,ll m)
{
	ll ans = 1,t = a;
	while(b){
		if(b & 1){
			ans *= t;
			ans %= m;
		}
		t *= t;
		t %= m;
		b >>= 1;
	}
	return ans;
}

//fraction initation

const ll MAXN = 5000005;
ll frac[MAXN];
void init(ll MAXN, ll modp)
{
	frac[0] = 1;frac[1] = 1;frac[2] = 2;
	for(int i = 3;i <= MAXN;i++) frac[i] = (frac[i - 1] * i) % modp;
}

//c x y

ll c(ll n,ll m, ll p) {
	return (frac[n] * qp(frac[m], p - 2, p)) % p * qp(frac[n - m], p - 2, p) % p;
}

ll D[MAXN] = {1, 0};

void init_(int _MAXN)
{
	up(i, 2, _MAXN)
		D[i] = 4 * i % mod * (i - 1) % mod * D[i - 1] % mod + 8 * i % mod * (i - 1) % mod * (i - 1) % mod * D[i - 2] % mod;
}

ll solve(ll n, ll k)
{
	return c(n, k, mod) * c(n, k, mod) % mod * frac[k] % mod * qp(2, k, mod) % mod * D[n - k] % mod;
}

int main() {
	int T = read();
	init(MAXN - 3, mod);
	init_(MAXN - 3);
	while(T--)
	{
		ll n = readl(), k = readl();
		printl(solve(n, k));
		puts("");
	}
	return 0;
}
2022/4/9 20:16
加载中...