提出 #71903667


ソースコード 拡げる

#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long
#define vi vector <int>
#define sz(a) ((int) (a).size())
#define me(f, x) memset(f, x, sizeof(f))
#define uint unsigned int
using namespace std;
const int N = 507, mod = 998244353;
struct mint {
	int x;
	inline mint(int o = 0) { x = o; }
	inline mint & operator = (int o) { return x = o, *this; }
	inline mint & operator += (mint o) { return (x += o.x) >= mod && (x -= mod), *this; }
	inline mint & operator -= (mint o) { return (x -= o.x) < 0 && (x += mod), *this; }
	inline mint & operator *= (mint o) { return x = (ll) x * o.x % mod, *this; }
	inline mint & operator ^= (int b) {
		mint w = *this;
		mint ret(1);
		for(; b; b >>= 1, w *= w) if(b & 1) ret *= w;
		return x = ret.x, *this;
	}
	inline mint & operator /= (mint o) { return *this *= (o ^= (mod - 2)); }
	friend inline mint operator + (mint a, mint b) { return a += b; }
	friend inline mint operator - (mint a, mint b) { return a -= b; }
	friend inline mint operator * (mint a, mint b) { return a *= b; }
	friend inline mint operator / (mint a, mint b) { return a /= b; }
	friend inline mint operator ^ (mint a, int b) { return a ^= b; }
};
inline mint qpow(mint x, int y = mod - 2) { return x ^ y; }
mint fac[N], ifac[N], inv[N];
void init(int x) {
	fac[0] = ifac[0] = inv[1] = 1;
	L(i, 2, x) inv[i] = (mod - mod / i) * inv[mod % i];
	L(i, 1, x) fac[i] = fac[i - 1] * i, ifac[i] = ifac[i - 1] * inv[i];
} 
mint C(int x, int y) {
	return x < y || y < 0 ? 0 : fac[x] * ifac[y] * ifac[x - y];
}
inline mint sgn(int x) {
	return (x & 1) ? mod - 1 : 1;
}

int n, m, k;
int a[N], b[N];

struct Mat {
    int M[4][4];
    Mat(int x = 0) {
        me(M, 0);
        L(i, 0, 3) M[i][i] = x;
    }
};
Mat operator * (Mat A, Mat B) {
    Mat C;
    L(i, 0, 3) L(j, 0, 3) L(k, 0, 3) {
        (C.M[i][j] += (ll) A.M[i][k] * B.M[k][j] % mod) %= mod;
    }
    return C;
}
Mat operator + (Mat A, Mat B) {
    Mat C;
    L(i, 0, 3) L(j, i, 3) {
        C.M[i][j] = (A.M[i][j] + B.M[i][j]) % mod;
    }
    return C;
}
Mat operator ^ (Mat A, int b) {
    Mat ret(1);
    for(; b; b >>= 1, A = A * A) if(b & 1) ret = ret * A;
    return ret;
}

void Main() {
}
mint dp[N];
mint calc(int n, int x, int y, int z) {
    //L(i, 0, n) dp[i] = 0;
    Mat C(0);
    int v[3] = {x, y, z};
    L(i, 0, 2) L(j, 0, i) C.M[j][i] = v[i];
    Mat ans = (C ^ n);
    return ((ll)ans.M[0][0] + ans.M[0][1] + ans.M[0][2]) % mod;
}
int main () {
	ios :: sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
    cin >> n >> m >> k;
    // u, v, v <= u
    mint ans = 0;
    L(u, 1, min(k, m)) {
        L(v, 1, min(u, (k - 1) / u)) {
            int lim = min(k - u * v, m);
            int ls = min(v, lim);
            // (<v) u, (<v) v, (<=ls), [<=lim]
            ans += calc(n - 3, v - 1, v - 1, ls) * lim;
        }
    }
    // v, u, v<u
    L(u, 1, min(k, m)) {
        L(v, 1, min(u - 1, (k - 1) / u)) {
            int lim = min(k - u * v, m);
            int ls = min(v, lim);
            // (<v) v, (<=min(v,u-1)) u, (<=ls), [<=lim]
            ans += calc(n - 3, v - 1, min(v, u - 1), ls) * lim;
        }
    }
    cout << ans.x << '\n';
    return 0;
} 

提出情報

提出日時
問題 D - Max Prod Plus
ユーザ zhoukangyang
言語 C++23 (GCC 15.2.0)
得点 1200
コード長 3353 Byte
結果 AC
実行時間 601 ms
メモリ 3604 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 1200 / 1200
結果
AC × 4
AC × 29
セット名 テストケース
Sample example_00.txt, example_01.txt, example_02.txt, example_03.txt
All example_00.txt, example_01.txt, example_02.txt, example_03.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 2 ms 3580 KiB
example_01.txt AC 2 ms 3520 KiB
example_02.txt AC 9 ms 3536 KiB
example_03.txt AC 600 ms 3416 KiB
test_00.txt AC 380 ms 3492 KiB
test_01.txt AC 56 ms 3552 KiB
test_02.txt AC 176 ms 3392 KiB
test_03.txt AC 233 ms 3416 KiB
test_04.txt AC 285 ms 3492 KiB
test_05.txt AC 421 ms 3536 KiB
test_06.txt AC 225 ms 3516 KiB
test_07.txt AC 128 ms 3444 KiB
test_08.txt AC 154 ms 3392 KiB
test_09.txt AC 298 ms 3604 KiB
test_10.txt AC 551 ms 3492 KiB
test_11.txt AC 571 ms 3392 KiB
test_12.txt AC 596 ms 3552 KiB
test_13.txt AC 548 ms 3544 KiB
test_14.txt AC 551 ms 3444 KiB
test_15.txt AC 593 ms 3536 KiB
test_16.txt AC 600 ms 3556 KiB
test_17.txt AC 601 ms 3512 KiB
test_18.txt AC 1 ms 3492 KiB
test_19.txt AC 1 ms 3552 KiB
test_20.txt AC 1 ms 3516 KiB
test_21.txt AC 2 ms 3544 KiB
test_22.txt AC 30 ms 3580 KiB
test_23.txt AC 27 ms 3504 KiB
test_24.txt AC 37 ms 3532 KiB