N^2 暴力 90 分?
查看原帖
N^2 暴力 90 分?
999244
Aurie楼主2025/7/25 19:46
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10; 
int dp[2][N], n, in;

struct FastMod {
    int f, l;
	uint64_t m, d;
    FastMod(__uint128_t d): d(d) {
        l = 64 - __builtin_clzll(d - 1);
        const __uint128_t one = 1;
        __uint128_t M = ((one << (64 + l)) + (one << l)) / d;
        if(M < (one << 64)) f = 1, m = M;
        else f = 0, m = M - (one << 64);
    }
    friend uint64_t operator/(uint64_t n, const FastMod &m) {
        if (m.f) return __uint128_t(n) * m.m >> 64 >> m.l;
        else {
            uint64_t t = __uint128_t(n) * m.m >> 64;
            return (((n - t) >> 1) + t) >> (m.l - 1);
        }
    }
    friend uint64_t operator%(uint64_t n, const FastMod &m) {
        return n - n / m * m.d;
    }
};
int main() {
    cin >> n >> in;
    FastMod mod(in);
    dp[0][0] = 1;
    int p = 1, q = 0, ans = 0;
    for (int i = 1; i <= n; i++) {
		for (int j = i; j < (i << 1); j++) dp[p][j] = dp[q][j - 1];
		for (int j = i << 1; j <= n; j++) dp[p][j] = (dp[q][j - 1] + dp[p][j - i]) % mod;
		ans = (ans + dp[p][n]) % mod;
		p ^= q ^= p ^= q; 
	}
	cout << ans << endl;
    return 0;
}

2025/7/25 19:46
加载中...