Submission #1542646


Source Code Expand

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <ctime>
#include <cassert>
#include <complex>
#include <string>
#include <cstring>
using namespace std;

#ifdef LOCAL
	#define eprintf(...) fprintf(stderr, __VA_ARGS__)
#else
	#define eprintf(...) 42
#endif

typedef long long ll;
typedef pair<int, int> pii;
#define mp make_pair

const ll MOD = 998244353;
ll add(ll x, ll y) {
	x += y;
	if (x >= MOD) return x - MOD;
	return x;
}
ll sub(ll x, ll y) {
	x -= y;
	if (x < 0) return x + MOD;
	return x;
}
ll mult(ll x, ll y) {
	return (x * y) % MOD;
}
ll bin_pow(ll x, ll p) {
	if (p == 0) return 1;
	if (p & 1) return mult(x, bin_pow(x, p - 1));
	return bin_pow(mult(x, x), p / 2);
}
ll Rev(ll x) {
	return bin_pow(x, MOD - 2);
}
ll W;

const int LOG = 20;
const int N = 1 << 20;
ll w[N];
int rev[N];

void initFFT() {
	for (ll x = 2;; x++) {
		ll y = x;
		for (int i = 1; i < LOG; i++)
			y = mult(y, y);
		if (y == MOD - 1) {
			W = x;
			break;
		}
	}
	w[0] = 1;
	for (int i = 1; i < N; i++)
		w[i] = mult(w[i - 1], W);
	rev[0] = 0;
	for (int mask = 1; mask < N; mask++) {
		int k = 0;
		while(((mask >> k) & 1) == 0) k++;
		rev[mask] = rev[mask ^ (1 << k)] ^ (1 << (LOG - 1 - k));
	}
}

ll F[2][N];
void FFT(ll *A) {
	for (int i = 0; i < N; i++)
		F[0][rev[i]] = A[i];
	int t = 0, nt = 1;
	for (int lvl = 0; lvl < LOG; lvl++) {
		int len = 1 << lvl;
		for (int st = 0; st < N; st += (len << 1))
			for (int i = 0; i < len; i++) {
				ll ad = mult(F[t][st + len + i], w[i << (LOG - 1 - lvl)]);
				F[nt][st + i] = add(F[t][st + i], ad);
				F[nt][st + len + i] = sub(F[t][st + i], ad);
			}
		swap(t, nt);
	}
	for (int i = 0; i < N; i++)
		A[i] = F[t][i];
}

ll f[N], rf[N];
ll a[N];

ll getC(int n, int k) {
	if (k < 0 || k > n) return 0;
	return mult(f[n], mult(rf[k], rf[n - k]));
}

int main()
{
//	freopen("input.txt", "r", stdin);
//	freopen("output.txt", "w", stdout);

	initFFT();

	f[0] = 1;
	for (int i = 1; i < N; i++)
		f[i] = mult(f[i - 1], i);
	rf[N - 1] = Rev(f[N - 1]);
	for (int i = N - 1; i > 0; i--)
		rf[i - 1] = mult(rf[i], i);

	for (int k = 0; k < N / 2; k++) {
		a[k] = mult(f[2 * k], mult(rf[k], rf[k]));
	}
	FFT(a);
	for (int i = 0; i < N; i++)
		a[i] = mult(a[i], a[i]);
	FFT(a);
	reverse(a + 1, a + N);
	ll rN = Rev(N);
	for (int i = 0; i < N; i++) {
		a[i] = mult(a[i], rN);
		a[i] = mult(a[i], mult(rf[2 * i], mult(f[i], f[i])));
		a[i] = sub(a[i], 1);
		a[i] = mult(a[i], (MOD + 1) / 2);
		a[i] += i;
	}

	int n, m;
	scanf("%d%d", &n, &m);
	if (n < m) swap(n, m);
	if (n == m) {
		printf("%lld\n", a[n]);
		return 0;
	}

	ll ans = 0;

	for (int k = 0; k <= m; k++) {
		int L = n - m + k - 1;
		ll p = getC(L + k, k);
		if (k > 0)
			p = sub(p, getC(L + k, k - 1));
		p = mult(p, getC(2 * (m - k), m - k));
		ans = add(ans, mult(p, add(L + 1, a[m - k])));
	}
	ans = mult(ans, mult(rf[n + m], mult(f[n], f[m])));
	printf("%lld\n", ans);

	return 0;
}

Submission Info

Submission Time
Task F - Yes or No
User Um_nik
Language C++14 (GCC 5.4.1)
Score 2000
Code Size 3208 Byte
Status AC
Exec Time 343 ms
Memory 53632 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:138:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
                       ^
./Main.cpp:131:14: warning: iteration 524288u invokes undefined behavior [-Waggressive-loop-optimizations]
   a[i] = mult(a[i], mult(rf[2 * i], mult(f[i], f[i])));
              ^
./Main.cpp:129:20: note: containing loop
  for (int i = 0; i < N; i++) {
                    ^

Judge Result

Set Name Sample Partial All
Score / Max Score 0 / 0 1500 / 1500 500 / 500
Status
AC × 5
AC × 28
AC × 75
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt
Partial sample_01.txt, sample_02.txt, sample_04.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_2_01.txt, subtask_2_02.txt, subtask_2_03.txt, subtask_2_04.txt, subtask_2_05.txt, subtask_2_06.txt, subtask_2_07.txt, subtask_2_08.txt, subtask_2_09.txt, subtask_2_10.txt, subtask_2_11.txt, subtask_2_12.txt, subtask_2_13.txt, subtask_2_14.txt, subtask_2_15.txt, subtask_2_16.txt, subtask_2_17.txt, subtask_2_18.txt, subtask_2_19.txt, subtask_2_20.txt, subtask_2_21.txt, subtask_2_22.txt, subtask_2_23.txt, subtask_2_24.txt, subtask_2_25.txt, subtask_2_26.txt, subtask_2_27.txt, subtask_2_28.txt, subtask_2_29.txt, subtask_2_30.txt, subtask_2_31.txt, subtask_2_32.txt, subtask_2_33.txt, subtask_2_34.txt, subtask_2_35.txt, subtask_2_36.txt, subtask_2_37.txt, subtask_2_38.txt, subtask_2_39.txt, subtask_2_40.txt
Case Name Status Exec Time Memory
sample_01.txt AC 291 ms 53504 KB
sample_02.txt AC 272 ms 53504 KB
sample_03.txt AC 272 ms 53504 KB
sample_04.txt AC 282 ms 53504 KB
sample_05.txt AC 288 ms 53504 KB
subtask_1_01.txt AC 307 ms 53504 KB
subtask_1_02.txt AC 275 ms 53632 KB
subtask_1_03.txt AC 316 ms 53632 KB
subtask_1_04.txt AC 312 ms 53504 KB
subtask_1_05.txt AC 273 ms 53504 KB
subtask_1_06.txt AC 302 ms 53504 KB
subtask_1_07.txt AC 280 ms 53504 KB
subtask_1_08.txt AC 279 ms 53504 KB
subtask_1_09.txt AC 300 ms 53504 KB
subtask_1_10.txt AC 273 ms 53504 KB
subtask_1_11.txt AC 272 ms 53504 KB
subtask_1_12.txt AC 276 ms 53504 KB
subtask_1_13.txt AC 272 ms 53504 KB
subtask_1_14.txt AC 275 ms 53632 KB
subtask_1_15.txt AC 272 ms 53504 KB
subtask_1_16.txt AC 276 ms 53504 KB
subtask_1_17.txt AC 275 ms 53504 KB
subtask_1_18.txt AC 276 ms 53504 KB
subtask_1_19.txt AC 272 ms 53504 KB
subtask_1_20.txt AC 308 ms 53504 KB
subtask_1_21.txt AC 289 ms 53504 KB
subtask_1_22.txt AC 275 ms 53504 KB
subtask_1_23.txt AC 272 ms 53504 KB
subtask_1_24.txt AC 278 ms 53504 KB
subtask_1_25.txt AC 275 ms 53504 KB
subtask_2_01.txt AC 272 ms 53504 KB
subtask_2_02.txt AC 272 ms 53504 KB
subtask_2_03.txt AC 320 ms 53632 KB
subtask_2_04.txt AC 291 ms 53504 KB
subtask_2_05.txt AC 283 ms 53504 KB
subtask_2_06.txt AC 297 ms 53504 KB
subtask_2_07.txt AC 285 ms 53504 KB
subtask_2_08.txt AC 304 ms 53504 KB
subtask_2_09.txt AC 312 ms 53504 KB
subtask_2_10.txt AC 287 ms 53504 KB
subtask_2_11.txt AC 283 ms 53504 KB
subtask_2_12.txt AC 343 ms 53504 KB
subtask_2_13.txt AC 284 ms 53504 KB
subtask_2_14.txt AC 283 ms 53504 KB
subtask_2_15.txt AC 283 ms 53504 KB
subtask_2_16.txt AC 284 ms 53504 KB
subtask_2_17.txt AC 316 ms 53504 KB
subtask_2_18.txt AC 287 ms 53504 KB
subtask_2_19.txt AC 281 ms 53632 KB
subtask_2_20.txt AC 300 ms 53504 KB
subtask_2_21.txt AC 292 ms 53504 KB
subtask_2_22.txt AC 275 ms 53504 KB
subtask_2_23.txt AC 272 ms 53504 KB
subtask_2_24.txt AC 311 ms 53504 KB
subtask_2_25.txt AC 278 ms 53504 KB
subtask_2_26.txt AC 293 ms 53504 KB
subtask_2_27.txt AC 272 ms 53504 KB
subtask_2_28.txt AC 272 ms 53504 KB
subtask_2_29.txt AC 278 ms 53504 KB
subtask_2_30.txt AC 287 ms 53504 KB
subtask_2_31.txt AC 276 ms 53504 KB
subtask_2_32.txt AC 287 ms 53504 KB
subtask_2_33.txt AC 331 ms 53504 KB
subtask_2_34.txt AC 284 ms 53504 KB
subtask_2_35.txt AC 288 ms 53504 KB
subtask_2_36.txt AC 285 ms 53504 KB
subtask_2_37.txt AC 279 ms 53504 KB
subtask_2_38.txt AC 300 ms 53632 KB
subtask_2_39.txt AC 284 ms 53504 KB
subtask_2_40.txt AC 275 ms 53504 KB