提出 #57128906


ソースコード 拡げる

#include <bits/stdc++.h>
#define cerr cout << "in " << __LINE__ << "\t: "
using namespace std;
const int mod = 998244353;
struct mint {
	int x;
	mint() : x(0) {}
	mint(long long y, bool flag = 0) {
		if (flag) x = y;
		else x = (y % mod + mod) % mod;
	}
	friend const mint ksm(mint a, long long b);
	const mint inv() {return ksm(*this, mod - 2);}
};
bool operator == (const mint a, const mint b) {return a.x == b.x;}
bool operator != (const mint a, const mint b) {return a.x != b.x;}
bool operator < (const mint a, const mint b) {return a.x < b.x;}
int operator ! (const mint a) {return !a.x;}
const mint operator + (const mint a, const mint b) {
	mint res(a.x + b.x, 1);
	if (res.x >= mod) res.x -= mod;
	return res;
}
mint& operator += (mint &a, const mint b) {
	a.x += b.x;
	if (a.x >= mod) a.x -= mod;
	return a;
}
const mint operator - (const mint a, const mint b) {
	mint res(a.x - b.x, 1);
	if (res.x < 0) res.x += mod;
	return res;
}
mint& operator -= (mint &a, const mint b) {
	a.x -= b.x;
	if (a.x < 0) a.x += mod;
	return a;
}
const mint operator * (const mint a, const mint b) {
	return mint((long long)a.x * b.x % mod, 1);
}
mint& operator *= (mint &a, const mint b) {
	a.x = (long long)a.x * b.x % mod;
	return a;
}
const mint ksm(mint a, long long b) {
	mint res(1, 1);
	for (; b; a *= a, b >>= 1)
		if (b & 1) res *= a;
	return res;
}
const mint operator / (const mint a, const mint b) {
	return a * ksm(b, mod - 2);
}
mint& operator /= (mint &a, const mint b) {
	a = a * ksm(b, mod - 2);
	return a;
}
ostream& operator << (ostream &out, const mint a) {
	return out << a.x;
}
istream& operator >> (istream &in, mint &a) {
	long long y;
	in >> y, a = mint(y);
	return in;
}
const int MAXV = 1000;
mint inv[MAXV + 10], jc[MAXV + 10], invjc[MAXV + 10];
struct comb_init {
	comb_init() {
		jc[0] = 1;
		for (int i = 1; i <= MAXV; i++)
			jc[i] = jc[i - 1] * i;
		invjc[MAXV] = jc[MAXV].inv();
		for (int i = MAXV; i > 0; i--)
			invjc[i - 1] = invjc[i] * i;
		for (int i = 1; i <= MAXV; i++)
			inv[i] = jc[i - 1] * invjc[i];
	}
} comb_init;
mint C(int x, int y) {
	if (y < 0 || x < y) return 0;
	return jc[x] * invjc[y] * invjc[x - y];
}
int n, m, a[510][510][510];
mint f[510][510];
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int l, r, x;
		cin >> l >> r >> x;
		a[x][l][r] = 1;
	}
	for (int i = 1; i <= n; i++)
		for (int len = 2; len <= n; len++)
			for (int l = 1, r = len; r <= n; l++, r++)
				a[i][l][r] |= a[i][l + 1][r] | a[i][l][r - 1];
	for (int i = 0; i <= n; i++)
		f[i + 1][i] = 1;
	for (int len = 1; len <= n; len++)
		for (int l = 1, r = len; r <= n; l++, r++) {
			for (int k = l; k <= r; k++) {
				if (a[k][l][r]) continue;
				f[l][r] += f[l][k - 1] * f[k + 1][r] * C(r - l, k - l);
			}
		}
	cout << f[1][n] << "\n";
	return 0;
}

提出情報

提出日時
問題 C - Not Argmax
ユーザ cxm1024
言語 C++ 20 (gcc 12.2)
得点 600
コード長 2952 Byte
結果 AC
実行時間 669 ms
メモリ 503660 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 4
AC × 31
セット名 テストケース
Sample 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt
All 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt
ケース名 結果 実行時間 メモリ
00-sample-001.txt AC 1 ms 4548 KiB
00-sample-002.txt AC 1 ms 4556 KiB
00-sample-003.txt AC 2 ms 4704 KiB
00-sample-004.txt AC 1 ms 5136 KiB
01-001.txt AC 1 ms 4468 KiB
01-002.txt AC 1 ms 4600 KiB
01-003.txt AC 378 ms 351580 KiB
01-004.txt AC 50 ms 71892 KiB
01-005.txt AC 6 ms 13236 KiB
01-006.txt AC 545 ms 472084 KiB
01-007.txt AC 46 ms 66436 KiB
01-008.txt AC 669 ms 503464 KiB
01-009.txt AC 665 ms 503464 KiB
01-010.txt AC 665 ms 503472 KiB
01-011.txt AC 666 ms 503460 KiB
01-012.txt AC 643 ms 503468 KiB
01-013.txt AC 635 ms 503408 KiB
01-014.txt AC 583 ms 503536 KiB
01-015.txt AC 546 ms 503404 KiB
01-016.txt AC 533 ms 503408 KiB
01-017.txt AC 495 ms 503532 KiB
01-018.txt AC 542 ms 503528 KiB
01-019.txt AC 511 ms 503528 KiB
01-020.txt AC 507 ms 503464 KiB
01-021.txt AC 512 ms 503524 KiB
01-022.txt AC 510 ms 503536 KiB
01-023.txt AC 511 ms 503660 KiB
01-024.txt AC 513 ms 503404 KiB
01-025.txt AC 514 ms 503536 KiB
01-026.txt AC 543 ms 503536 KiB
01-027.txt AC 545 ms 503472 KiB